外部化Grails数据源configuration

Grails 1.x允许通过设置grails.config.locations指令来使用外部configuration文件。 是否有一种类似的方法可用于Datasource.groovy中的数据库configuration的外部化(无需设置JNDI)?

如果能够在应用程序之外的简单configuration文件中configuration数据库证书将会很有帮助。

提前致谢!

您可以使用grails.config.locations中指定的属性文件作为外部化数据源configuration的一种方法。 以下是我通常如何设置一个Grails项目:

在我的DataSource.groovy中,我为生产环境指定了这个:

.... .... production { dataSource { dbCreate = "update" driverClassName = "com.myorg.jdbcDriverNotExists" url = "" username = "" password = "" } } .... .... 

我在Config.groovy中指定一个外部属性文件:

 grails.config.locations = [ "classpath:app-config.properties"] 

在属性文件(存储在grails-app / conf /中)我指定实际的数据源信息:

 dataSource.driverClassName=oracle.jdbc.OracleDriver dataSource.url=jdbc:oracle:thin:@host:port:sid dataSource.username=sa dataSource.password=secret 

我也使用属性文件作为覆盖Config.groovy中其他值的方法。 部署应用程序时,如果必须修改数据源信息,则只需编辑/WEB-INF/classes/app-config.properties文件并重新启动即可。

上面的答案并没有真正地使configuration具体化。 他很近,但configuration仍然在应用程序中。 我将在启动应用程序/服务器时使用JVM环境var,以指向外部configuration所在应用程序之外的位置。 读取config.groovy文件中的environment var并使用它获取外部configuration文件。 像这样的东西:

 def extConfig = System.properties.getProperty('ENVVAR'); grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"] 

对我来说这是行不通的。 获取一个环境variables。

更好地使用:

 System.getenv().get("ENVVAR").toString() 

只需将Config.groovy文件中的configuration文件位置如下所示即可

 grails.config.locations = [ "file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties", "file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy", "classpath:${appName}-${Environment.current.name}-datasource.properties", "classpath:${appName}-${Environment.current.name}-config.groovy" ] 

并将所有关于数据源和其他configuration值的细节放在适当的文件中。 因此,您可以将configuration外部化,无需重新启动即可更改值。