JAVA (tomcat) 中的环境变量

Environment Variables in JAVA (tomcat)

我的/etc/environment如下

APP="/opt/apps/" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" JAVA_HOME="/usr/lib/jvm/java-8-oracle"

我已经在我的机器上获取了 source /etc/environment。当我在终端

上键入 echo $APP 时,我能够得到输出

但是当我从 java 文件中调用它时

LOGGER.error("APP: " + System.getenv("APP")); LOGGER.error("PATH: " + System.getenv("PATH")); LOGGER.error("JAVA_HOME: " + System.getenv("JAVA_HOME"));

我只得到 PATH 的输出,但没有得到其他 2 个环境变量。

输出

2017-12-18 07:22:10 ERROR JRWebService:127 - APP: null 2017-12-18 07:22:10 ERROR JRWebService:128 - PATH:/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 2017-12-18 07:22:10 ERROR JRWebService:129 - JAVA_HOME: null

请指正我做错了什么

好像APP和JAVA_HOME没有导出。对于 unix shells,设置(变量在您当前的 shell 中可见)和导出(变量对所有子进程可见)之间存在差异。如果您只键入 "X=Y",X 会被设置,但不会导出。 PATH 大部分已经导出到某个地方。

您可以在控制台中通过 运行ning "export | grep APP" 来测试它。如果 APP 没有出现,变量将对 java 或您 运行 的任何其他程序不可见,即使 echo $APP 工作得很好。

如果是这种情况,只需将 "export APP" 添加到您的 .profile 或用于启动您的 java 应用程序的脚本(或进行测试,只需在之前在控制台上键入你开始 java).

您不应该获取您的 /etc/environment。这不是让变量进入你的过程的方法。 /etc/environment 文件不是脚本,因此获取它没有任何意义。它只是一个设置列表,有点像属性文件。

有关详细信息,请参阅 this

登录时读取。因此,要使变量可见,您应该注销并重新登录。