我需要从 Tomcat 应用程序读取环境变量。我尝试这样做:
/opt/tomcat/conf/catalina.properties
最后添加:
my.special.variable=some_value
并阅读它
System.getenv("my.special.variable")
我得到 null
笔记
我在操作系统级别(linux ubuntu)定义了几个,但获取它们的结果是 tomcat 根目录 - /opt/tomcat。
例如 :
我printenv
可以看到变量 HOME(也可以使用 echo $HOME)。从 tomcat 外部的程序运行代码 - 结果是正确的 - /home/user。
在 tomcat 中部署的应用程序中完全相同的代码返回 - /opt/tomcat。
答案1
您可以在setenv.sh
(Linux/UNIX) 或setenv.bat
(Windows) 中定义变量。以适合您所运行的操作系统的方式定义变量。对于 Linux/UNIX,您需要导出变量。您还可以在启动 Tomcat 的环境中定义它们。
您还可以为应用程序(本地)更改创建appenv.sh
或appenv.bat
文件。请阅读现有的setenv.sh
或setenv.bat
文件以了解详细信息。
句号和连字符对环境变量无效。传统上,名称的转换方法是将名称大写并将句号和连字符更改为下划线。这将给出名称MY_SPECIAL_VARIABLE
。这将用如下行定义:
export MY_SPECIAL_VARIABLE=some.value
您还可以通过添加字符串“-Dmy.special.variable=some_value to the command line used to start Tomcat. This is done in the same file. In
setenv.sh”来定义 Java 系统属性,您可以添加如下行:
export JAVA_OPTS="$JAVA_OPTS -Dmy.special.variable=some_value"
您还可以使用此文件来调整 Java 配置。如果JAVA_OPTS
在用于启动 Tomcat 的环境中定义了系统变量,则其值将添加到命令行。
如果你使用 Java 系统属性,可以通过调用 来检索System.getProperty
。代码如下:
System.getProperty("my.special.variable");
答案2
环境变量不是 Tomcat 属性。
据我所知,您不能在实际代码中使用这些属性,只能在 server.xml 中使用。
如果您想使用可以通过 System.getenv 检索的环境变量,则需要使用操作系统定义它们;这完全取决于操作系统。一个经典的 Linux 示例是在/etc/default/tomcat
或在 systemd 服务中。