JVM系统属性 - 如何视为字符串文字

时间:2016-09-27 18:08:50

标签: java linux bash properties jvm

我有一个Java应用程序,它使用我创建的-D系统属性。我有问题让其中一个正确翻译。

在我的本地计算机上的测试环境(localhost)中,我使用IntelliJ Idea IDE运行Windows,并通过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 个答案:

答案 0 :(得分:1)

Bash需要转义花括号,如:

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

另一种选择是尝试用单引号括起整个字符串。 Bash不会在单引号内进行任何扩展:

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

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