2016-09-27 30 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