2012-03-13 240 views
6

Java是否有默認的系統環境變量,當我們設置它時,它總是會被讀取/追加? CATALINA_OTPS/JAVA_OPTS等似乎只對TOMCAT/JBOSS等Java系統環境變量

  1. 我不想把它通過Java系統屬性(這是通過-Dprop1 =值-Dprop2 =數值傳遞),因爲它涉及到殼/批腳本。
  2. 它應該跨越操作系統,比如Windows中的雙擊jar文件。
  3. 它應該跨越不同的JRE(Sun,IBM,OpenJDK等)。
  4. 它不應該涉及額外的編碼。
  5. 它應該在大多數庫配置文件中工作,如設置log4j 級別$ {LOG_LEVEL}。

更新:新增項目#4和5,從標題刪除OS,使我的問題更加清晰。

更新2:看着感知的回答後,就好像我的項目2和3可以通過System.getenv實現。如何實現項目4和5?

下面是場景示例: 現在想象一下JAVA_DEFAULT_OPTS是一個環境變量,它將被Java讀取,因爲它現在已經成爲標準。在開發臺式機上,我設置了JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m;在生產服務器機器上,客戶設置爲JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m。當我/用戶雙擊Windows上的jar文件時,應用程序將運行不同的log4j級別和最大內存堆大小。

回答

10

有一個特殊的環境變量叫做_JAVA_OPTIONS,它的值將被JVM(java.exe)拾取。

在Windows中:

set _JAVA_OPTIONS=-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd 

在Linux中:

export _JAVA_OPTIONS='-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd' 

對於Java Web Start的是JAVAWS_VM_ARGS。對於javaw.exe(小程序),它是_JPI_VM_OPTIONS

+0

它的工作原理。至少在使用Sun JRE的Windows中。 Linux也應該工作(http://stackoverflow.com/a/1508684/418439)。任何人都可以告訴我,如果Mac也可以工作這是復活節彩蛋嗎?它甚至沒有正式記錄在http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html。我應該問幾年......( – 2012-03-13 03:27:43

+0

@CKLee,你可以在Java 2D文檔中找到它,https://docs.oracle.com/javase/8/docs/technotes/guides/2d /flags.html和http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html – RealHowTo 2015-03-26 21:50:26

1

Java有當JVM啓動總是被設置標準OS系統環境變量:

  • os.name
  • os.arch
  • os.version

所有可通過'System.getProperty(propertyName)'訪問'

如果你還需要更多的東西,你可以隨時如Management API

+0

你的意思是Java Management Extensions(JMX)API?如何做到這一點沒有額外的編碼? – 2012-03-13 02:00:32

+0

包含指向Management API的鏈接。不確定'額外編碼'是什麼意思,你必須至少寫出訪問你需要的信息所需的一行或兩行代碼。 – Perception 2012-03-13 02:04:08

+0

我已經添加了項目#5,使我的問題更清晰。 – 2012-03-13 02:06:01