server.xml中的环境/系统变量

mic*_*nko 13 tomcat environment-variables system-variable

如何在tomcat server.xml,context.xml等配置文件中使用环境/系统变量?

我尝试使用${ENV_VAR_NAME}(包括环境和系统变量),${env.ENV_VAR_NAME}(对于环境变量).似乎没有任何工作.

set*_*voy 16

它是如何在我的盒子里实现的.

启动的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
Run Code Online (Sandbox Code Playgroud)

server.xml:

<Connector
  port="${port.http}"
  protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="${port.https}"
/>
Run Code Online (Sandbox Code Playgroud)

看看过程:

$ ps ux | grep tomcat
... -Xms1G -Xmx1G ... -Denv=KIEV_DEV... -Dport.http=8084 -Dport.https=8446 -Dport.shutdown=8008...
Run Code Online (Sandbox Code Playgroud)

检查端口:

$ 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
Run Code Online (Sandbox Code Playgroud)


Bre*_*ken 14

通过将系统属性org.apache.tomcat.util.digester.PROPERTY_SOURCE设置为 value ,可以在 server.xml 等中引用环境变量org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource

该系统属性自 7.0 以来一直可用,但EnvironmentPropertySource直到 8.5 才在文档中提及。

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 )

  • 请注意,“org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource”现已弃用,至少在 Tomcat 9.0.55 中是如此。另一种选择是 catalina.properties 中的“org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource”:https://tomcat.apache.org/tomcat-9.0-doc/api /org/apache/tomcat/util/digester/EnvironmentPropertySource.html (4认同)
  • 请注意,因为在不久的将来,类名中的 `$` 将更改为 `.` 参见 https://github.com/apache/tomcat/commit/ffba0c6c97f03e0a32c8a40a1589f93419458ef1 (2认同)
  • 如果你发现在 shell 中使用美元符号很难,只需 `echo 'org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource' &gt;&gt; conf/catalina.properties`脚本。 (2认同)