小编run*_*tta的帖子

将环境变量传递到Tomcat 7.0 Web应用程序上下文

Apache Tomcat 7.0,CentOS 5.8 i386

Web应用程序需要特定的环境变量XY才能在其上下文中出现.此变量在/ etc/profile中作为计算结果(即非静态值)设置,并且也由在同一系统上运行的其他本机应用程序使用(因此它必须是环境变量方法).

Tomcat是使用专用tomcat用户和sudo的通用脚本启动的.通过/ etc/sudoers中的显式定义解决了(通过stackoverflow)传递XYsudo的第一个问题:

Defaults    env_keep ="XY"
Run Code Online (Sandbox Code Playgroud)

这意味着环境变量XYsudo保留,这不是默认情况.

现在,环境变量XY在tomcat进程中可见.这可以使用ps/ proc/tomcat-PID/environ或*/your_tomcat/bin/startup.sh*中的显式echo $ XY进行验证(使用sudo由init.d脚本调用).但是在tomcat进程中查看XY并不意味着Web应用程序可以看到它.借助于Web应用程序将其环境转储到日志文件中

LOGGER.debug("Environment: " + System.getenv());  
Run Code Online (Sandbox Code Playgroud)

令我惊讶的结果是:没有XY,尽管tomcat拥有它!

在阅读了tomcat 7.0的上下文文档后(注意区分7.0和更早版本的tomcat),我在*/your_tomcat/conf/context.xml*中添加了以下条目:

<Context>
...
<Environment name="XY" value="INIT_VALUE" type="java.lang.String"/>  
...
</Context>
Run Code Online (Sandbox Code Playgroud)

现在System.getenv()的输出确实包含我的XY环境变量但是它具有来自/ etc/profile的正确值而不是我在context.xml中指定的值INIT_VALUE.换句话说,我的/ etc/profile确实会覆盖INIT_VALUE …

variables environment tomcat sudo context.xml

3
推荐指数
1
解决办法
9728
查看次数

标签 统计

context.xml ×1

environment ×1

sudo ×1

tomcat ×1

variables ×1