Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat server.xml中的环境/系统变量_Tomcat_Environment Variables_System Variable - Fatal编程技术网

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

Tomcat server.xml中的环境/系统变量,tomcat,environment-variables,system-variable,Tomcat,Environment Variables,System Variable,如何在tomcat server.xml、context.xml等配置文件中使用环境/系统变量 我尝试使用${ENV\u VAR\u NAME}(对于环境变量和系统变量),${ENV.ENV\u VAR\u NAME}(对于环境变量)。似乎什么都不管用 它是如何在我的盒子里实现的 用于启动的Bash脚本: #!/bin/sh SMEMORY=1G XMEMORY=1G if [ $ENV == DEV ]; then port_shutdown="8005" port_http="8

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


我尝试使用
${ENV\u VAR\u NAME}
(对于环境变量和系统变量),
${ENV.ENV\u VAR\u NAME}
(对于环境变量)。似乎什么都不管用

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

用于启动的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}"
/>
检查端口:

$ 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

通过将系统属性
org.apache.tomcat.util.digester.property\u SOURCE
设置为值
org.apache.tomcat.util.digester.digester$EnvironmentPropertySource
,可以在server.xml等文件中引用环境变量

该系统属性从7.0开始可用,但直到8.5,文档中才提到
EnvironmentPropertySource

更新(2020年4月):

最新的tomcat版本(9.0.34、8.5.54)现在支持大多数配置文件中的属性替换:

您找到解决方案了吗?@DagR,很遗憾,您能参考官方文档吗?谢谢简而言之,您正在使用自定义环境变量修改tomcat启动环境,然后可以从解析tomcat xml的环境(应用程序内存与基本linux环境)访问这些环境变量。换句话说,Tomcat不能访问普通的BASH env变量,但可以将它们注入Tomcat环境,使它们可以在Tomcat xmls内部被引用,对吗?小心,因为在不久的将来,类名中的
$
将更改为
请参见
echo'org.apache.tomcat.util.digester.PROPERTY\u SOURCE=org.apache.tomcat.util.digester.digester$EnvironmentPropertySource'>>conf/catalina.properties
,如果您发现很难在shell脚本中使用美元签名,那么基本上添加
'org.apache.tomcat.util.digester.PROPERTY\u SOURCE=org.apache.tomcat.util.digester.digester$EnvironmentPropertySource'
这行代码指向
/tomcat/conf/catalina.properties
?当tomcat启动时,它将使用环境变量解析
server.xml
中的令牌@youfu@JonathanHagen对
$ 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