3

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

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

1)需要什么罐子

2)需要修改哪些grails文件

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

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

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

4

2 回答 2

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" 
  }

资源.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

}

c3p0.jar在项目的 lib 文件夹中。

这些是唯一需要的更改。

于 2014-09-17T10:57:40.813 回答
2

这是相应的文档。该博客提供了一个代码示例,如何在 Grails 中延迟创建 DataSource ......并且可以在这样的代码中使用 C3P0。

由于 Grails 默认附带 DBCP,当可以将配置委托DataSource和池化配置到底层容器(例如 Tomcat 或老板。所以我推荐这种方式,这里是一个如何为 Tomcat DataSource 设置 C3P0的示例,只需将其 jar 添加到lib目录中。

现在,在配置多个数据源时,您应该注意 Grails 中缺少两阶段提交支持的部分。

如果您希望对来自两个 DataSource 的连接所做的操作包含在单个事务中(如果成功则同时提交,如果失败则回滚),则必须使用 XA 事务管理器。

在这种情况下,我建议您在 JBoss 中部署并在 JBoss 本身中配置 DataSources 和 pooling,JDBC 驱动程序必须安装在 JBoss 库中。

您将获得附带的 XA 事务管理器的好处。在 Grails 方面,DataSource 被配置为查询在您的 WAR 文件中resource-ref声明的 JNDI 条目WEB-INF/web.xmlWEB-INF/jboss-web.xml文件。

dataSource {
    jndiName = "java:comp/env/myDataSource"
}
于 2012-09-24T20:57:03.220 回答