【问题标题】:How to tell a Grails plugin to use a secondary datasource (not the default one)?如何告诉 Grails 插件使用辅助数据源(不是默认数据源)?
【发布时间】:2014-12-09 14:59:05
【问题描述】:

我创建了一个插件,负责 RDBMS 访问辅助数据源,这样我们就可以对将要使用它的应用程序隐藏域和服务层(它会阻止他们修改该源)。我已将插件发布到工件,然后将其成功导入到我的应用程序中。但是,插件使用的数据源文件已从打包中排除,并且在调用插件中的服务方法时,它会尝试针对我的默认数据源执行这些查询。

  1. 有没有办法告诉 grails 插件不要使用默认数据源而是使用辅助数据源?或者有没有办法让插件不排除它自己的 DataSource.groovy 文件?

谢谢

更新

下面提供的答案会起作用,基本上这就是 Grails 中多个数据源的工作方式。唯一的缺点是,当我开发插件本身并且我想将它作为应用程序运行以确保它执行我想要的操作时,grails 期望的数据源必须称为 dataSource 所以我有注释掉

static mapping = {
  // datasource 'dataSource_lookup'
}

为了能够运行它。然后,当我看到一切都如我所愿并且我想发布插件时,我必须浏览所有域文件并取消注释上面的行,以便在将插件导入我的主应用程序时它会有一个参考到辅助数据源。然而,这是非常非常痛苦和缓慢的。

有没有更好的方法来做到这一点?为什么默认数据源必须称为dataSource?可以改吗?

【问题讨论】:

    标签: grails grails-plugin grails-2.0


    【解决方案1】:

    在插件的域类中,您必须执行类似的操作

    static mapping ={
        //if you need to use the second ds only in Production you can use the Environment
        if(Environment.PRODUCTION){
            datasource('your_sencondary_datasource')
        }
    }
    

    在 Datasource.groovy 的主要应用程序中,您需要像这样映射数据源

    production{
        dataSource {
            <'your configs of primary ds'>
        }
    
        dataSource_you_secondary_datasource {
            <'your configs to secondary ds'>
        }
    }
    

    【讨论】:

    • 您也可以将辅助数据源注入到 grails 服务中:def dataSource_your_secondary_datasource
    • 我知道这个解决方案会起作用,但这意味着我的所有域都必须有静态映射条目,指示要使用的数据源的名称。现在的问题是,当我开发插件本身时,我必须注释掉所有域的映射,因为当我单独运行插件时,它期望数据源被称为 datasource 而不是 datasource_lookup。这使得每次我想开发注释掉的插件以及每次我准备发布取消注释然后发布插件时都非常没有效率。有没有更好的方法?
    • @meurer 忘了在我的评论中提到你,请看上面看看你有什么建议。
    • @Viriato,我不知道这是否是解决此问题的最佳方法,但您可以在域类中使用 Environment.PRODUCTION。像这样,if(Environment.PRODUCTION){ datarouce('your_ds')}
    • @meurer 感谢您更新您完全做到的答案。我知道环境,过去我也曾在 Bootstrap 中使用过它。不知道为什么我没想到。
    猜你喜欢
    • 2013-12-28
    • 2014-08-23
    • 2015-09-11
    • 1970-01-01
    • 2011-09-09
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多