我们有一组内部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中定义的,因此我猜测外部配置文件的处理方式存在一些问题。有没有可行的解决办法?