grails如何(重新)连接到第二个数据库

约翰·利特尔

我们有一个grails应用程序,该应用程序具有存储在grails数据库中的各种域对象。该应用程序连接到第二个数据库,运行一些原始sql,并在表中显示结果。它基本上是一个报告服务器。

我们通过在DataSource.groovy中指定第二个数据源来连接第二个db,例如:

dataSource_target {
dialect = org.hibernate.dialect.MySQLInnoDBDialect
pooled = true
jmxExport = true
driverClassName = "com.mysql.jdbc.Driver"
username = "bla"
password = "bla"
}

然后在控制器中,我们有

static mapping = {
    datasource 'ALL'
 }

然后在服务中,我们有:

         con = new Sql(dataSource_target)
         rows = con.rows(sql)

它可以工作,但是有两个大问题:

  1. 如果在运行gra-app时报表应用程序无法连接到第二个“目标”数据源,则它将无法启动。

  2. 一旦运行,如果该应用程序失去与目标数据库的连接,它将不会尝试重新连接,您必须停止并重新启动整个grails应用程序。

我们需要更强大的功能-仅在用户决定运行报表时才调用目标数据库-在应用启动时不运行目标数据库,并且当我们调用con = new Sql(datasource)时应尝试连接(或重新连接)。

有什么想法可以实现这一目标吗?IE。一种在运行时连接到aribtrary数据库的方法,回拉一些行,如果到目标数据库的连接丢失,则重新建立,下次运行报表时它仍然可以工作。另外,如果在没有目标数据库的情况下启动了该应用程序,则该应用程序仍应启动,因为它在启动时不依赖于该应用程序。

谢谢,

约书亚·摩尔

您可能会考虑添加一些其他属性,以使其尝试重新连接。例如:

dataSource_target {
  dialect = org.hibernate.dialect.MySQLInnoDBDialect
  pooled = true
  jmxExport = true
  driverClassName = "com.mysql.jdbc.Driver"
  username = "bla"
  password = "bla"
  properties {
    maxActive = -1
    minEvictableIdleTimeMillis=1800000
    timeBetweenEvictionRunsMillis=1800000
    numTestsPerEvictionRun=3
    testOnBorrow=true
    testWhileIdle=true
    testOnReturn=true
    validationQuery="SELECT 1"
  }
}

我建议您更改属性以适合您的需求。但是,这将无法解决启动应用程序时数据库不可用的问题。

为了避免这种情况,您必须摆脱使用Grails数据源的麻烦。在这种情况下,您将需要在对数据库进行调用的服务中定义数据源。

def db = [
  url:'jdbc:hsqldb:mem:testDB', 
  user:'sa', 
  password:'', 
  driver:'org.hsqldb.jdbc.JDBCDriver'
]
def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)

当然,请修改此设置以适合您的需求。您甚至可以从Config.groovy中提取这些设置,而不是对其进行硬编码(强烈建议)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Symfony2创建第二个数据库连接?

来自分类Dev

用户登录后动态连接到第二个数据库-python Flask

来自分类Dev

在Codeigniter中连接第二个数据库时出现问题

来自分类Dev

Codeigniter-在哪里创建第二个数据库连接?

来自分类Dev

Laravel 4.2打开与主数据库的第二个数据库连接

来自分类Dev

如何切换到第二个数据库 Drupal

来自分类Dev

如果第一个失败,我可以连接到第二个数据库主机吗?

来自分类Dev

如何引用同一个数据库的第二个表

来自分类Dev

在第二个数据库上进行RunPython迁移

来自分类Dev

在第二个数据库上的Django调用存储过程

来自分类Dev

具有第二个数据库的PostgreSQL FOREIGN KEY

来自分类Dev

使用第二个数据库测试Yii REST应用程序

来自分类Dev

CodeIgniter-针对第二个数据库的表单验证

来自分类Dev

在第二个数据库上的Django调用存储过程

来自分类Dev

Symfony 3在服务中使用第二个数据库

来自分类Dev

启动第二个表单后关闭数据库连接

来自分类Dev

Spring Boot 应用程序不会连接到第二个数据源

来自分类Dev

如何将数据库记录传递给第二个活动并用listview显示在第二个活动中?

来自分类Dev

对于每个循环,在MVC视图中使用第二个数据库表模型

来自分类Dev

带有Express MongoDb / Mongoose的节点如何触发第二个数据库请求以创建事件记录器

来自分类Dev

SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

来自分类Dev

SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

来自分类Dev

根据第二个数据集和拆分列重新编码

来自分类Dev

如何在 Ajax 的第二个请求中修复插入到数据库中的 0 值?

来自分类Dev

如果第二个是Ruby中的!=“”,如何连接两个数组属性

来自分类Dev

2个数据库。如果第一个不存在值,则在第二个中查找/搜索

来自分类Dev

2个数据库。如果第一个不存在值,则在第二个中查找/搜索

来自分类Dev

两个类似的应用共享一个数据库。进行迁移。无法在第二个迁移上运行相同的迁移

来自分类Dev

如何选择然后拆分数据然后选择第二个数据?

Related 相关文章

  1. 1

    如何使用Symfony2创建第二个数据库连接?

  2. 2

    用户登录后动态连接到第二个数据库-python Flask

  3. 3

    在Codeigniter中连接第二个数据库时出现问题

  4. 4

    Codeigniter-在哪里创建第二个数据库连接?

  5. 5

    Laravel 4.2打开与主数据库的第二个数据库连接

  6. 6

    如何切换到第二个数据库 Drupal

  7. 7

    如果第一个失败,我可以连接到第二个数据库主机吗?

  8. 8

    如何引用同一个数据库的第二个表

  9. 9

    在第二个数据库上进行RunPython迁移

  10. 10

    在第二个数据库上的Django调用存储过程

  11. 11

    具有第二个数据库的PostgreSQL FOREIGN KEY

  12. 12

    使用第二个数据库测试Yii REST应用程序

  13. 13

    CodeIgniter-针对第二个数据库的表单验证

  14. 14

    在第二个数据库上的Django调用存储过程

  15. 15

    Symfony 3在服务中使用第二个数据库

  16. 16

    启动第二个表单后关闭数据库连接

  17. 17

    Spring Boot 应用程序不会连接到第二个数据源

  18. 18

    如何将数据库记录传递给第二个活动并用listview显示在第二个活动中?

  19. 19

    对于每个循环,在MVC视图中使用第二个数据库表模型

  20. 20

    带有Express MongoDb / Mongoose的节点如何触发第二个数据库请求以创建事件记录器

  21. 21

    SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

  22. 22

    SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

  23. 23

    根据第二个数据集和拆分列重新编码

  24. 24

    如何在 Ajax 的第二个请求中修复插入到数据库中的 0 值?

  25. 25

    如果第二个是Ruby中的!=“”,如何连接两个数组属性

  26. 26

    2个数据库。如果第一个不存在值,则在第二个中查找/搜索

  27. 27

    2个数据库。如果第一个不存在值,则在第二个中查找/搜索

  28. 28

    两个类似的应用共享一个数据库。进行迁移。无法在第二个迁移上运行相同的迁移

  29. 29

    如何选择然后拆分数据然后选择第二个数据?

热门标签

归档