server.xml 中的环境/系统变量
Posted
技术标签:
【中文标题】server.xml 中的环境/系统变量【英文标题】:Environment/system variables in server.xml 【发布时间】:2012-08-09 04:52:11 【问题描述】:如何在tomcat server.xml、context.xml等配置文件中使用环境/系统变量?
我尝试使用$ENV_VAR_NAME
(用于环境和系统变量)、$env.ENV_VAR_NAME
(用于环境变量)。似乎没有任何效果。
【问题讨论】:
你找到解决办法了吗? @DagR,很遗憾没有 【参考方案1】:它是如何在我的盒子里实现的。
用于启动的 Bash 脚本:
#!/bin/sh
SMEMORY=1G
XMEMORY=1G
if [ $ENV == DEV ]; then
port_shutdown="8005"
port_http="8080"
port_https="8443"
elif
[ $ENV == SIT ]; then
port_shutdown="8006"
port_http="8081"
port_https="8444"
elif
[ $ENV == UAT ]; then
port_shutdown="8007"
port_http="8082"
port_https="8445"
else
echo "Unknown ENV"
exit 1
fi
export CATALINA_OPTS=" $SYSTEM_PROPS -d64 -server -Xms$SMEMORY -Xmx$XMEMORY \
-XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=64M \
-XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=1024M \
-Dport.http=$port_http -Dport.https=$port_https -Dport.shutdown=$port_shutdown"
exec $CATALINA_HOME/bin/startup.sh
在server.xml
:
<Connector
port="$port.http"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="$port.https"
/>
看一下流程:
$ ps ux | grep tomcat
... -Xms1G -Xmx1G ... -Denv=KIEV_DEV... -Dport.http=8084 -Dport.https=8446 -Dport.shutdown=8008...
检查端口:
$ netstat -anp | grep java
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 :::8084 :::* LISTEN 23343/java
tcp 0 0 :::8446 :::* LISTEN 23343/java
【讨论】:
你能参考一下官方文档吗?谢谢! 所以简而言之,您正在使用自定义环境变量修改 tomcat 启动环境,然后可以从解析 tomcat xml 的环境(应用程序内存与基本 linux 环境)访问这些环境变量。所以换句话说,Tomcat 不能访问普通的 BASH 环境变量,但是你可以将它们注入到 Tomcat 环境中,使它们可以在 tomcat xmls 中被引用,对吗?【参考方案2】:通过将系统属性org.apache.tomcat.util.digester.PROPERTY_SOURCE
设置为值org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource
,可以在server.xml 等中引用环境变量。
该系统属性从 7.0 开始可用,但直到 8.5 文档中才提到 EnvironmentPropertySource
。
https://tomcat.apache.org/tomcat-9.0-doc/config/systemprops.html
更新(2020 年 4 月):
最新的 tomcat 版本(9.0.34、8.5.54)现在支持大多数配置文件中的属性替换: https://tomcat.apache.org/tomcat-9.0-doc/changelog.html#Tomcat_9.0.34_(markt)
【讨论】:
小心,因为在不久的将来,类名中的$
将更改为.
请参阅github.com/apache/tomcat/commit/…
如果您发现在 shell 脚本中使用美元符号很难玩,只需 echo 'org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource' >> conf/catalina.properties
。
所以基本上将'org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource'
这一行添加到/tomcat/conf/catalina.properties
?当tomcat启动时,它将使用环境变量解析server.xml
中的令牌? @youfu
@JonathanHagen 是的。
请注意 org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource
现在已弃用,至少在 Tomcat 9.0.55 中是这样。替代方法是 org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource
in catalina.properties:tomcat.apache.org/tomcat-9.0-doc/api/org/apache/tomcat/util/…以上是关于server.xml 中的环境/系统变量的主要内容,如果未能解决你的问题,请参考以下文章