无法使用Grails 3.2.9在命令行上传递系统属性

时间:2018-08-04 01:15:04

标签: grails groovy grails-3.0

我正在尝试使用-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在运行时传递其他设置,所以我真的需要它来工作。

1 个答案:

答案 0 :(得分:1)

问题原来出在application.yml文件中。这一点:

server:
   port: ${server.port}

实际上需要嵌套在grails元素下,如下所示:

grails:
  server:
    port: ${server.port}

这样做可以正常工作。请注意,您实际上根本不需要执行此操作,因为如果您具有用于通过系统属性传递的bootRun设置,则仅设置-Dserver.port=WHATEVER本身即可起作用。或者,您可以使用--port。我对此的兴趣实际上是确保一般通过系统属性,因为我需要为应用程序设置一些其他属性。我只是以此为实验。