如何从Grails插件加载外部配置

时间:2019-07-10 14:11:43

标签: hibernate grails grails-plugin grails-3.3

我们有一组内部Grails 3.3应用程序,它们在安全性,数据库访问等方面都共享通用配置。我想将此通用配置放入插件中,而不是在每个应用程序中重复使用。

到目前为止,我所做的是将external-config插件(https://plugins.grails.org/plugin/grails/external-config)设置为主机应用程序中的依赖项。该插件在其grails-app / conf目录下提供了一组.yml文件,然后我从主机应用程序中引用了这些文件。主机的application.yml的部分如下(匿名):

grails:
    config:
        locations:
            - classpath:pluginConfig.yml
            - classpath:hibernateConfig.yml
            - classpath:envConfig.yml



environments:
    test:
        grails:
            serverURL: http://test.company.com/app

    production:
        grails:
            serverURL: http://prod.company.com/app

这里的问题是,为了进行测试和生产,我们将数据库密码保存在另一个不在源存储库中的外部配置文件中。我已经尝试将其包含在插件提供的envConfig.yml文件中,就像这样(使用插件中的external-config插件):

test:
    grails:
        config:
            locations:
                - file:///path/to/file/dbConfig.yml

似乎dbConfig.yml从未加载,因为任何访问数据库的尝试都会抱怨用户名和密码无效。将用户名和密码直接放在插件的envConfig.yml中可以很好地工作,但这不是我们想要的方法。

然后我尝试将dbConfig.yml直接包含在主机应用程序中,如下所示:

grails:
    config:
        locations:
            - classpath:pluginConfig.yml
            - classpath:hibernateConfig.yml
            - classpath:envConfig.yml



environments:
    test:
        grails:
            config:
                locations:
                    - file:///path/to/file/dbConfig.yml

当我尝试部署和运行应用程序时,出现以下异常:

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

Hibernate方言是在hibernateConfig.yml中定义的,因此我猜测外部配置文件的处理方式存在一些问题。有没有可行的解决办法?

0 个答案:

没有答案