2016-09-27 31 views
1

我有一个使用-D系统属性创建的Java应用程序。我遇到了一些问题需要正确翻译。JVM系统属性 - 如何看待字符串文字

在我的本地计算机上,我正在使用Windows IntelliJ IDEA的IDE和我通过IDE进入-D系统属性,像这样在我的测试环境(本地主机):

-Dproperty={\"prop1\":\"val1\",\"prop2\":\"val2\"} 

我转义双引号,因为它们需要分开字符串文字。上述属性起作用,并且包括花括号的整个值被存储为字符串文字。

当我们将这个应用程序部署到我们的Linux云环境时,就会出现这个问题。我认为体系结构的差异导致系统属性无法正确读取。在bash中,我找到所有-D系统属性的进程ID并执行ps -fwwp [processId]命令。我看到上面的属性被分成一堆较小的属性,这些属性如下所示:

-Dproperty=prop1:val1 
-Dproperty=prop2:val2 
-Dproperty=prop3:val3 

等等

这导致我的应用程序,它使用这个属性的一部分失败。我试着做了一堆转义方法,但都没有工作。

我怎么能以这样的方式,该值作为字符串字面{"prop1":"val1","prop2":"val2"}

回答

1

猛砸需要在大括号治疗逃离这个系统属性进行转义,如:

-Dproperty=\{\"prop1\":\"val1\",\"prop2\":\"val2\"\} 

其他选项是尝试围绕单引号中的整个字符串。 Bash不会在单引号内做任何扩展:

-Dproperty='{"prop1":"val1","prop2":"val2"}' 

我不知道哪个选项会更容易与Windows环境兼容。

+0

谢谢!在我们的Linux云环境中,第一个选项不起作用。它仍然将它们分成键:值对。第二个选项(围绕单引号的整个值)为我工作。每当我部署到Linux环境时,我都必须记住更改此特定属性的值。 – bscott