2017-01-16 36 views
0

我想爲我的春季啓動應用程序啓用JMX,並嘗試了一切,但沒有成功。我認爲,問題是,我正在使用spring-boot-maven-pluginrepackage選項。啓用JMX與春季開機重新包裝

此刻,我做了以下內容:

export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1" 
java -jar target/myapp-1.0.0.jar 

但是當我啓動應用程序,它不偵聽端口1617。我不能從JMX客戶端連接和ss -tulpen也沒有列出端口。

我也嘗試過直接傳遞-D...參數。我也試過--com.sun...,並認爲Spring引導可以通過這種方式處理它們。我也在多臺機器上嘗試了許多其他的東西,但沒有成功。

一些進一步的信息:

  • 我的應用程序使用任何spring-boot父。
  • 我在ArchLinux系統上試過這個。
  • 我沒有任何特殊的iptables配置,所有端口都應該在配置的ip上可用。
  • 春天引導版本:1.4.1.RELEASE
  • Java版本:openjdk version "1.8.0_112"

什麼我做錯了,我在哪裏可以找到對幫助一個文檔?

UPDATE:我添加了一些線以用於讀取和打印傳遞JAVA_OPTS(如所解釋here)。當我通過IntelliJ啓動應用程序並將虛擬機選項設置爲上面的JAVA_OPTS值時,它可以工作。已打印的選項已打印,且VM正在偵聽端口1617.當我使用java -jar my.jar -Dcom.sun....啓動應用程序時,參數未打印且VM仍未偵聽端口1617.

+0

我認爲你正在使用[錯誤的方式(HTTP: //堆棧溢出。com/questions/2011311/running-java-with-java-opts-env-variable)來傳遞JMX參數。嘗試在'java'命令後直接傳遞它們。 –

+0

通過「它不聽1617端口」,你的意思是你不能連接,或者你已經在netstat中查看它? – chrylis

+0

@MaximDobryakov如上所述。我已經這樣做了。我用'java -Dcom.sun .... -jar ...'運行了java命令。 –

回答

1

問題已解決!我仍然不知道爲什麼它不能與JAVA_OPTS一起工作,但我知道我在直接傳遞選項時做錯了什麼:看起來我總是通過-jar ...選項之前-Dcom.sun...選項。但我現在發現:

這些選項的順序是必不可少的!

什麼?真?

是的!

所以,這對我現在的工作方式:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar my.jar 

,這一次確實工作:

java -jar my.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1617 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 
+0

非常感謝!我一直在尋找這一整天! – Sasa