car*_*mbo 6 grails command-line
我试图dataSource.url从命令行覆盖运行grails的值,例如
grails <set property> dbm-status
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是使用-D命令行参数
grails -DdataSource.url=jdbc:sqlserver://xx.xx.xx.xx;databaseName=db_name
Run Code Online (Sandbox Code Playgroud)
我试图添加一个额外的配置文件grails.config.locations,从中获取值,System.getProperty但似乎不起作用.
存在一种内置的方式来覆盖命令行中的配置值,否则如何从命令行将参数注入grails配置?
编辑:我不想使用其他环境/数据源来避免数据源配置重复以及为这个新环境配置事物的需要.
通过包含以下内容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']
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
现在,当我运行命令时,将应用覆盖:
grails dev -DdataSourceUrl=newUrl -DdataSourcePassword=newPass -DdataSourceUsername=newUser run-app
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果您希望能够覆盖每个环境,则必须为每个环境块复制此代码。如果您将其拉到根目录,它将无法工作,因为配置合并开始,并且最后一次运行实际上将应用 env {} 块中的内容,而不是系统属性中的内容。
再看一遍,这样的东西看起来更好:
...
url = System.properties['dataSourceUrl'] ?: 'jdbc:postgresql://localhost/db'
//and for every property...
...
Run Code Online (Sandbox Code Playgroud)