如何从命令行覆盖grails配置

时间:2015-01-28 15:27:08

标签: grails command-line

我试图从命令行覆盖运行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配置?

编辑:我不想使用其他环境/数据源来避免数据源配置重复以及为这个新环境配置内容的需要。

1 个答案:

答案 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...
...