Grails 1.x允许通过设置grails.config.locations指令来使用外部配置文件。是否有类似的方法可用于Datasource.groovy中的数据库配置的外部化(无需设置JNDI)?外部化Grails数据源配置
如果能够在应用程序之外的简单配置文件中配置数据库证书,这将会很有帮助。
在此先感谢!
Grails 1.x允许通过设置grails.config.locations指令来使用外部配置文件。是否有类似的方法可用于Datasource.groovy中的数据库配置的外部化(无需设置JNDI)?外部化Grails数据源配置
如果能够在应用程序之外的简单配置文件中配置数据库证书,这将会很有帮助。
在此先感谢!
您可以使用grails.config.locations中指定的属性文件作为外部化数据源配置的一种方法。下面是我通常如何建立一个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文件并重新启动即可。
上面的答案并不真正使配置具体化。他很近,但配置仍在应用程序中。 我将在启动应用程序/服务器时使用JVM环境var,以指向外部配置所在应用程序之外的位置。读取config.groovy文件中的environment var并使用它获取外部配置文件。这样的事情:
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"
]
,并把所有有关的数据源和其他配置值的细节在适当的文件。因此,您可以将配置外部化,无需重新启动即可更改值。
这看起来就像我以后一样!感谢您清晰简洁的回答,约翰:) – miek 2009-06-10 07:11:26