gpt4 book ai didi

grails - 如何从命令行覆盖 grails 配置

转载 作者:行者123 更新时间:2023-12-04 15:43:30 24 4
gpt4 key购买 nike

我正在尝试覆盖 dataSource.url从命令行运行 grails 的值,例如

grails <set property> dbm-status

我的第一次尝试是使用 -D命令行参数为
grails -DdataSource.url=jdbc:sqlserver://xx.xx.xx.xx;databaseName=db_name

我试图向 grails.config.locations 添加一个额外的配置文件从 System.getProperty 获取值但似乎不起作用。

存在从命令行覆盖配置值的内置方法,否则我如何将命令行中的参数注入(inject)到 grails 配置中?

编辑:我不想使用另一个环境/数据源来避免数据源配置重复和需要为这个新环境配置东西。

最佳答案

通过包含以下 ifDataSource.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 block 复制此代码。如果将其拉到根目录,它将无法工作,因为配置合并启动并且最后一次运行实际上将应用 env {} block 中的内容,而不是系统属性中的内容。

再看一遍类似的东西看起来更好:
...
url = System.properties['dataSourceUrl'] ?: 'jdbc:postgresql://localhost/db'
//and for every property...
...

关于grails - 如何从命令行覆盖 grails 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com