【发布时间】:2014-05-24 05:22:00
【问题描述】:
我们有一个 grails 应用程序,它在 grails 数据库中存储了各种域对象。该应用程序连接到第二个数据库,运行一些原始 sql,并在表中显示结果。它基本上是一个报告服务器。
我们通过在 DataSource.groovy 中指定第二个数据源来连接到第二个数据库,例如:
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)
它有效,但有两个大问题:
如果在执行 grails run-app 时报告应用无法连接到第二个“目标”数据源,则它不会启动。
一旦运行,如果应用程序失去与目标数据库的连接,它不会尝试重新连接,您必须停止并重新启动整个 grails 应用程序。
我们需要更健壮的东西——目标数据库仅在用户决定运行报表时被调用——它不会在应用启动时运行,当我们调用 con = new Sql(datasource) 时应该尝试连接(或重新连接) )。
有什么想法可以实现这一目标吗? IE。一种在运行时连接到任意数据库的方法,拉回一些行,如果与目标数据库的连接丢失,然后重新建立,下次运行报告时它应该仍然有效。此外,如果应用程序在目标数据库不存在时启动,它仍然应该启动,因为它在启动时不依赖它。
谢谢,
【问题讨论】:
标签: database grails datasource