如何为具有多个数据源的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.xmlWEB-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

这些是唯一需要的更改。