【问题标题】:State of the Grails datasources pluginGrails 数据源插件的状态
【发布时间】:2011-09-09 13:01:17
【问题描述】:

我正在尝试为我正在处理的应用程序运行多个数据源插件。 (对我来说)似乎对 grails 的升级之一破坏了插件的功能。我正在使用最新的安装 1.3.7 并尝试使用发布的示例应用程序。我已经在阳光下尝试了所有方法来使示例应用程序中的功能正常工作,但没有任何效果。

为了做一些进一步的测试,我将我的 grails env 降级到 1.0.3,这是编写演示应用程序的版本。使用这个版本运行时,一切正常;我可以连接到所有三个数据源而不会失败。

我的问题是:是否有人能够在 Grails 1.3.7 下成功使用该插件,并且,有人知道这是否仍然是一个活跃的项目吗?或者,是连接到多个数据源的另一种方法吗?

提前致谢,

唐纳德

【问题讨论】:

    标签: plugins grails datasource


    【解决方案1】:

    看来Datasources plugin 正在重新获得关注。

    来自This Week in Grails (2011-22) - “Grails 1.4 开发进展顺利。...我已经添加了对核心的多个数据源的支持(来自 Datasources 插件),并且正在努力添加两阶段提交(XA/ JTA) 用于 JDBC 和 JMS。"


    我成功地将Datasources plugin 集成到一个新的 Grails 1.3.7 项目中。我选择将配置与主数据源结合起来,以使其更易于维护。以下是我遵循的步骤:

    conf/BuildConfig.groovy 中使用 plugin dependency resolution 引用插件

    grails.project.dependency.resolution = {
        plugins {
            runtime ':datasources:0.5'
        }
    }
    

    conf/Datasources.groovy 中创建一个额外的数据源

    import org.codehaus.groovy.grails.commons.ConfigurationHolder
    
    datasources = {
        datasource(name: 'DS2') {
            domainClasses([domain.Object])
            if (ConfigurationHolder.config.DS2.dataSource.readOnly) readOnly(ConfigurationHolder.config.DS2.dataSource.readOnly)
            driverClassName(ConfigurationHolder.config.DS2.dataSource.driverClassName)
            url(ConfigurationHolder.config.DS2.dataSource.url)
            if (ConfigurationHolder.config.DS2.dataSource.username) username(ConfigurationHolder.config.DS2.dataSource.username)
            if (ConfigurationHolder.config.DS2.dataSource.password) password(ConfigurationHolder.config.DS2.dataSource.password) 
            if (ConfigurationHolder.config.DS2.dataSource.dbCreate) dbCreate(ConfigurationHolder.config.DS2.dataSource.dbCreate)
            dialect(ConfigurationHolder.config.DS2.dataSource.dialect)
            if (ConfigurationHolder.config.DS2.dataSource.jndiName) jndiName(ConfigurationHolder.config.DS2.dataSource.jndiName)
            if (ConfigurationHolder.config.DS2.dataSource.pooled) pooled(ConfigurationHolder.config.DS2.dataSource.pooled)
            if (ConfigurationHolder.config.DS2.dataSource.loggingSql) loggingSql(ConfigurationHolder.config.DS2.dataSource.loggingSql)
            if (ConfigurationHolder.config.DS2.dataSource.logSql) logSql(ConfigurationHolder.config.DS2.dataSource.logSql)
    
            hibernate {
                cache {
                    if (ConfigurationHolder.config.DS2.hibernate.cache.use_second_level_cache) use_second_level_cache(ConfigurationHolder.config.DS2.hibernate.cache.use_second_level_cache)
                    if (ConfigurationHolder.config.DS2.hibernate.cache.use_query_cache) use_query_cache(ConfigurationHolder.config.DS2.hibernate.cache.use_query_cache)
                    if (ConfigurationHolder.config.DS2.hibernate.cache.provider_class) provider_class(ConfigurationHolder.config.DS2.hibernate.cache.provider_class)
                }
            }
        }
    }
    

    conf/Datasource.groovy

    中配置默认​​数据源和环境特定设置
    DS2 {
        dataSource {
            pooled=true
            readOnly=false
            driverClassName="org.hsqldb.jdbcDriver"
            username=""
            password=""
            dialect="org.hibernate.dialect.HSQLDialect"
        }
        hibernate {
            cache.use_second_level_cache=true
            cache.use_query_cache=true
            cache.provider_class="net.sf.ehcache.hibernate.EhCacheProvider"
        }
    }
    
    environments {
        development {
            dataSource {
                dbCreate = "create-drop" // one of 'create', 'create-drop','update'
                url = "jdbc:hsqldb:mem:devDB"
            }
            DS2 {
                dataSource {
                    dbCreate="create-drop"
                    url="jdbc:hsqldb:mem:devDB2"
                }
            }
        }
        test {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:mem:testDb"
            }
            DS2 {
                dataSource {
                    dbCreate="update"
                    url="jdbc:hsqldb:mem:testDb2"
                }
            }
        }
        production {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:file:prodDb;shutdown=true"
            }
            DS2 {
                dataSource {
                    dbCreate="update"
                    url = "jdbc:hsqldb:file:prodDb2;shutdown=true"
                }
            }
        }
    }
    

    您还可以使用externalized configuration 来配置您的主要数据源和其他数据源。

    【讨论】:

    • 很好,你比我早了 4 个小时写了这篇文章。 :P
    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2018-08-29
    • 2015-07-18
    • 2018-04-10
    • 2013-01-02
    • 2014-03-17
    • 2019-08-03
    • 2015-03-30
    相关资源
    最近更新 更多