配置 Grails 以使用自己的 DataSource 实现或代理标准 DataSource

Posted

技术标签:

【中文标题】配置 Grails 以使用自己的 DataSource 实现或代理标准 DataSource【英文标题】:Configuring Grails to use own DataSource implementation or to proxy the standard DataSource 【发布时间】:2011-03-25 04:08:28 【问题描述】:

在一个应用程序中,我想使用我自己的 javax.sql.DataSource 实现,它扩展了 Grails 使用的标准 org.apache.commons.dbcp.BasicDataSource,并添加了基于 Grails 应用程序中当前登录用户设置客户端标识符的功能。

在 Grails 应用程序中更改底层 javax.sql.DataSource 实现的最佳方法是什么?

目前我看到了两种可能性:

更改 Grails 使用的 DataSource 的实现 代理 Grails 使用的 DataSource 并使用 AOP 添加功能

关于如何处理此要求的任何提示?

【问题讨论】:

【参考方案1】:

这是我的 resources.groovy

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

// Place your Spring DSL code here
beans = 

    /**
     * c3P0 pooled data source that forces renewal of DB connections of certain age 
     * to prevent stale/closed DB connections and evicts excess idle connections
     * Still using the JDBC configuration settings from DataSource.groovy
     * to have easy environment specific setup available
     */
    dataSource(com.mchange.v2.c3p0.ComboPooledDataSource)  bean ->
        bean.destroyMethod = 'close'
        //use grails' datasource configuration for connection user, password, driver and JDBC url
        user = CH.config.dataSource.username 
        password = CH.config.dataSource.password
        driverClass = CH.config.dataSource.driverClassName
        jdbcUrl = CH.config.dataSource.url
        //force connections to renew after 2 hours
        maxConnectionAge = 2 * 60 * 60
        //get rid too many of idle connections after 30 minutes 
        maxIdleTimeExcessConnections = 30 * 60
    


我正在使用 c3p0 ComboPooledDataSource

【讨论】:

谢谢!这对我来说很有希望。 嗨。这对 Grails 2.3.6 仍然有效吗?谢谢!【参考方案2】:

您是否尝试在 resources.groovy 中配置您自己的数据源?这是一篇介绍该过程的博文(不是我的)

http://burtbeckwith.com/blog/?p=312

你需要的东西在最后。

【讨论】:

以上是关于配置 Grails 以使用自己的 DataSource 实现或代理标准 DataSource的主要内容,如果未能解决你的问题,请参考以下文章

如何将 grails 配置为始终在状态 500 上显示自己的错误页面

使用 Nexus 存储库配置 Grails 插件

Grails - 模式配置

在 Grails 中使用自己的方法扩展 SpEL?

使用“gradle test”测试 Grails 3 应用程序使用错误的环境配置

Grails Spring Security 插件身份验证失败