我正在尝试使用-Dproperty=value
语法将系统属性传递给Grails,但似乎无法正常工作。这是我的设置:
build.gradle:
bootRun {
addResources = true
systemProperties = System.properties
}
application.yml:
server:
port: '${server_port}'
命令行:
grails -Dserver_port=8180 run-app
当我尝试运行该应用程序时,我得到了:
java.lang.NumberFormatException:
For input string: "${server_port}"
文档here建议采用这种方法,但显然$ {server_port}表达式不会替换为-D选项传递的值。
有人能弄清是什么原因导致了这种行为吗?
另外,在有人问之前。.是的,我知道--port命令行开关。这样做的目的不是专门传递服务器端口,尽管我希望与其他脚本保持一致。但是除此之外,我还计划使用-Doption = value在运行时传递其他设置,所以我真的需要它来工作。
答案 0 :(得分:1)
问题原来出在application.yml文件中。这一点:
server:
port: ${server.port}
实际上需要嵌套在grails元素下,如下所示:
grails:
server:
port: ${server.port}
这样做可以正常工作。请注意,您实际上根本不需要执行此操作,因为如果您具有用于通过系统属性传递的bootRun设置,则仅设置-Dserver.port=WHATEVER
本身即可起作用。或者,您可以使用--port
。我对此的兴趣实际上是确保一般通过系统属性,因为我需要为应用程序设置一些其他属性。我只是以此为实验。