我试图从命令行覆盖运行grails的dataSource.url
值,例如
grails <set property> dbm-status
我的第一次尝试是使用-D
命令行参数
grails -DdataSource.url=jdbc:sqlserver://xx.xx.xx.xx;databaseName=db_name
我尝试向grails.config.locations
添加一个额外的配置文件,该文件从System.getProperty
获取但似乎无效。
存在一种内置方式来覆盖命令行中的配置值,否则如何从命令行将参数注入grails配置?
编辑:我不想使用其他环境/数据源来避免数据源配置重复以及为这个新环境配置内容的需要。
答案 0 :(得分:2)
在if
中添加以下DataSource.groovy
我可以覆盖url,密码和用户名属性,如果提供了url。 (适用于Grails 2.x)
....
environments {
development {
dataSource {
url = "jdbc:postgresql://localhost/db"
username = "user"
password = "pass"
if (System.properties['dataSourceUrl']) {
println 'Taking dataSource url, password, username from command line overrides'
url = System.properties['dataSourceUrl']
password = System.properties['dataSourcePassword']
username = System.properties['dataSourceUsername']
}
}
}
...
现在,当我运行命令时,将应用覆盖:
grails dev -DdataSourceUrl=newUrl -DdataSourcePassword=newPass -DdataSourceUsername=newUser run-app
不幸的是,如果您希望能够覆盖每个环境,则必须为每个env块复制此代码。如果你把它提升到root它就不会工作,因为配置合并开始,最后一次运行实际上将应用env {}块中的内容,而不是系统属性中的内容。&lt; < / p>
再看一遍这样的东西看起来更好:
...
url = System.properties['dataSourceUrl'] ?: 'jdbc:postgresql://localhost/db'
//and for every property...
...