我正在尝试为正在处理的应用程序运行多个数据源插件。在我看来,升级到grails之一已破坏了插件的功能。我正在使用最新的安装1.3.7,并尝试使用发布的示例应用程序。我已经尝试在阳光下进行所有操作,以使示例应用程序中的功能正常工作,但没有任何效果。
为了进行进一步的测试,我将grails env降级为编写演示应用程序的版本1.0.3。我可以毫无问题地连接到所有三个数据源。
我的问题是:在那里有人可以在Grails 1.3.7下成功使用该插件吗?有人知道这是否仍然是一个 Activity 项目吗?或者,是连接到多个数据源的另一种方法吗?
提前致谢,
唐纳德
最佳答案
看来Datasources plugin受到了新的关注。
来自This Week in Grails (2011-22)-“Grails 1.4开发进展顺利。...我已经向核心添加了对多个数据源的支持(来自Datasources插件),并且正在为JDBC和JMS添加两阶段提交(XA / JTA)。”
我已成功将Datasources plugin集成到新的Grails 1.3.7项目中。我选择将配置与主要数据源结合起来以使其更易于维护。这是我遵循的步骤:
在conf / BuildConfig.groovy中使用plugin dependency resolution引用插件
grails.project.dependency.resolution = {
plugins {
runtime ':datasources:0.5'
}
}
在conf / Datasources.groovy中创建其他数据源
import org.codehaus.groovy.grails.commons.ConfigurationHolder
datasources = {
datasource(name: 'DS2') {
domainClasses([domain.Object])
if (ConfigurationHolder.config.DS2.dataSource.readOnly) readOnly(ConfigurationHolder.config.DS2.dataSource.readOnly)
driverClassName(ConfigurationHolder.config.DS2.dataSource.driverClassName)
url(ConfigurationHolder.config.DS2.dataSource.url)
if (ConfigurationHolder.config.DS2.dataSource.username) username(ConfigurationHolder.config.DS2.dataSource.username)
if (ConfigurationHolder.config.DS2.dataSource.password) password(ConfigurationHolder.config.DS2.dataSource.password)
if (ConfigurationHolder.config.DS2.dataSource.dbCreate) dbCreate(ConfigurationHolder.config.DS2.dataSource.dbCreate)
dialect(ConfigurationHolder.config.DS2.dataSource.dialect)
if (ConfigurationHolder.config.DS2.dataSource.jndiName) jndiName(ConfigurationHolder.config.DS2.dataSource.jndiName)
if (ConfigurationHolder.config.DS2.dataSource.pooled) pooled(ConfigurationHolder.config.DS2.dataSource.pooled)
if (ConfigurationHolder.config.DS2.dataSource.loggingSql) loggingSql(ConfigurationHolder.config.DS2.dataSource.loggingSql)
if (ConfigurationHolder.config.DS2.dataSource.logSql) logSql(ConfigurationHolder.config.DS2.dataSource.logSql)
hibernate {
cache {
if (ConfigurationHolder.config.DS2.hibernate.cache.use_second_level_cache) use_second_level_cache(ConfigurationHolder.config.DS2.hibernate.cache.use_second_level_cache)
if (ConfigurationHolder.config.DS2.hibernate.cache.use_query_cache) use_query_cache(ConfigurationHolder.config.DS2.hibernate.cache.use_query_cache)
if (ConfigurationHolder.config.DS2.hibernate.cache.provider_class) provider_class(ConfigurationHolder.config.DS2.hibernate.cache.provider_class)
}
}
}
}
在conf / Datasource.groovy中配置默认的数据源和特定于环境的设置
DS2 {
dataSource {
pooled=true
readOnly=false
driverClassName="org.hsqldb.jdbcDriver"
username=""
password=""
dialect="org.hibernate.dialect.HSQLDialect"
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class="net.sf.ehcache.hibernate.EhCacheProvider"
}
}
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
url = "jdbc:hsqldb:mem:devDB"
}
DS2 {
dataSource {
dbCreate="create-drop"
url="jdbc:hsqldb:mem:devDB2"
}
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
DS2 {
dataSource {
dbCreate="update"
url="jdbc:hsqldb:mem:testDb2"
}
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
DS2 {
dataSource {
dbCreate="update"
url = "jdbc:hsqldb:file:prodDb2;shutdown=true"
}
}
}
}
您还可以使用externalized configuration来配置您的主要和其他数据源。
关于plugins - Grails数据源状态插件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6256641/