Grails 1.x允许通过设置grails.config.locations指令来使用外部配置文件。在Datasource.groovy中是否有类似的方法用于外部化数据库配置(而无需设置JNDI)?
能够在应用程序外部的简单配置文件中配置数据库凭据将非常有帮助。
提前感谢!
Grails 1.x允许通过设置grails.config.locations指令来使用外部配置文件。在Datasource.groovy中是否有类似的方法用于外部化数据库配置(而无需设置JNDI)?
能够在应用程序外部的简单配置文件中配置数据库凭据将非常有帮助。
提前感谢!
....
....
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 文件并重新启动即可。
上面的答案并没有真正地将配置外置。他接近了,但是配置仍然驻留在应用程序中。 我会在应用程序/服务器启动时使用JVM环境变量来指向应用程序外部存放配置文件的位置。在config.groovy文件中读取环境变量,并使用它获取外部配置文件。像这样:
def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
对我来说这个不起作用。要获取一个环境变量。
最好使用:
System.getenv().get("ENVVAR").toString()
只需在Config.groovy文件中如下设置配置文件位置:
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"
]
将数据源和其他配置值的所有细节放在适当的文件中。因此,您可以将配置外部化,无需重新启动即可更改值。