我正在尝试找到一个易于理解的解决方案(可能是这个问题的答案),用于在具有多个数据源的grails 2.X Web应用程序上配置c3p0连接池。我无法通过谷歌搜索找到任何明确和简单的帮助。
我正在寻找的答案将说明以下内容:
1)需要什么罐子
2)需要修改哪些grails文件
3)放入这些grails文件的内容示例,包括import语句和示例代码。
假设我的应用程序中有两个数据源,dataSource和DataSource_A在DataSource.groovy中配置。
如何在grails 2.X Web应用程序中为多个数据源配置c3p0连接池?
答案 0 :(得分:2)
这是corresponding documentation。这篇博客provides a code example如何在Grails中延迟创建DataSource ......并且可以在这样的代码中使用C3P0。
由于Grails默认带有DBCP,因此在找到DataSource
并将池配置到池中时,我找不到添加代码来设置C3P0池(后来替换默认事务管理器...)的相关性底层容器,例如Tomcat或JBoss。所以我建议这样做,这里是一个例子how to setup C3P0 for a Tomcat DataSource,只需在lib
目录中添加它的jar。
现在,在配置多个DataSource时,您应该注意Grails中缺少两阶段提交支持的部分。
如果您希望对来自两个DataSource的连接执行的操作包含在单个事务中(如果成功则提交两者,如果失败则返回两者),则必须使用XA事务管理器。
在这种情况下,我建议您在JBoss和configure DataSources and pooling in JBoss中部署,JDBC驱动程序必须安装在JBoss库中。
您将获得所包含的XA事务管理器的好处。在Grails端,DataSource配置为查询在WAR文件的resource-ref
和WEB-INF/web.xml
文件中声明的JNDI WEB-INF/jboss-web.xml
条目。
dataSource {
jndiName = "java:comp/env/myDataSource"
}
答案 1 :(得分:2)
datasource.groovy /外部配置文件
dataSource {
pooled = true
dbCreate = "create-drop"
url = "jdbc:mysql://<ip address>/test1"
driverClassName = "com.mysql.jdbc.Driver"
username = "test"
password = "test123"
}
dataSource_A {
pooled = true
dbCreate = "create-drop"
url = "jdbc:mysql://<ip address>/test2"
driverClassName = "com.mysql.jdbc.Driver"
username = "test"
password = "test123"
}
<强> resources.groovy 强>
dataSource(ComboPooledDataSource) { bean ->
idleConnectionTestPeriod = 1 * 60 * 60
testConnectionOnCheckin = true
bean.destroyMethod = 'close'
user = grailsApplication.config.dataSource.username
password = grailsApplication.config.dataSource.password
driverClass = grailsApplication.config.dataSource.driverClassName
jdbcUrl = grailsApplication.config.dataSource.url
}
dataSource_A(ComboPooledDataSource) { bean ->
idleConnectionTestPeriod = 1 * 60 * 60
testConnectionOnCheckin = true
bean.destroyMethod = 'close'
user = grailsApplication.config.dataSource_A.username
password = grailsApplication.config.dataSource_A.password
driverClass = grailsApplication.config.dataSource_A.driverClassName
jdbcUrl = grailsApplication.config.dataSource_A.url
}
项目的lib文件夹中的c3p0.jar 。
这些是唯一需要的更改。