如何为具有多个数据源的grails 2.X应用程序配置c3p0?

时间:2012-09-21 13:57:39

标签: java grails connection-pooling c3p0

我正在尝试找到一个易于理解的解决方案(可能是这个问题的答案),用于在具有多个数据源的grails 2.X Web应用程序上配置c3p0连接池。我无法通过谷歌搜索找到任何明确和简单的帮助。

我正在寻找的答案将说明以下内容:

1)需要什么罐子

2)需要修改哪些grails文件

3)放入这些grails文件的内容示例,包括import语句和示例代码。

假设我的应用程序中有两个数据源,dataSource和DataSource_A在DataSource.groovy中配置。

如何在grails 2.X Web应用程序中为多个数据源配置c3p0连接池?

2 个答案:

答案 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-refWEB-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

这些是唯一需要的更改。