Grails 1.x 允许通过设置grails.config.locations指令来使用外部配置文件。是否有类似的方法可用于将 Datasource.groovy 中的数据库配置外部化(无需设置 JNDI)?
能够在应用程序外部的简单配置文件中配置数据库凭据将被证明是有帮助的。
提前致谢!
Grails 1.x 允许通过设置grails.config.locations指令来使用外部配置文件。是否有类似的方法可用于将 Datasource.groovy 中的数据库配置外部化(无需设置 JNDI)?
能够在应用程序外部的简单配置文件中配置数据库凭据将被证明是有帮助的。
提前致谢!
您可以使用 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 环境变量来指向外部配置所在的应用程序之外的位置。读出 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"
]
并将有关数据源和其他配置值的所有详细信息放在适当的文件中。因此,您可以将配置外部化,而无需重新启动以更改值。