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