将 VM 参数传递给 Apache Tomcat

2022-09-01 12:53:12

我有一个webProject,其中包含一个名为“-Dfolder”的VM参数

我在 applicationContext 上使用这个参数,如下所示:

<value>file:${FNET_CORE_CONFIG}/conf/${folder}/jdbc.properties</value>

在Eclipse中,为了进行测试,我使用“运行配置”来设置如下值:

-Dfolder=Dev

现在,我想在Apache Tomcat上测试我的web应用程序,所以我需要设置/发送文件夹VM参数。

我该怎么做?

我必须使用 setenv.sh?如何?。有人可以给我举个例子吗?

谢谢,对不起我的英语


答案 1

我不知道你使用的是哪个版本的Tomcat,但是在Tomcat 7的文件 catalina.sh 中,你可以指定变量CATALINA_OPTS这个变量将传递给jvm。

但是,设置环境变量可能不是实现目标的最佳方式。也许最好的办法是创建单独的“app.properties”文件,并将其包含在 applicationContext 中,如下所示:

<context:property-placeholder location="classpath*:app.properties" />

和 catalina.sh 解决方案

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.

例:

CATALINA_OPTS=“-Dfolder=Dev”

编辑:

对于窗口,它应该是这样的set CATALINA_OPTS="-Dfolder=Dev"

编辑:

在Spring配置中,你可以像${propertyname}一样使用系统属性,也可以包括带有属性定义的文件,以及该文件中定义的所有属性在config中也变得可用。context:property-placeholder

例如,您具有基本集属性:config.properties 和具有 db 连接设置(DEV.properties、UAT.properties、PROD.properties)的文件集。那么,如何为不同的环境包含不同的属性呢?可以通过多种方式完成,例如,在catalina中设置系统属性.bat

set CATALINA_OPTS="-Dbuild=DEV"

和应用程序配置.xml

<context:property-placeholder location="classpath*:${build}.properties, classpath*:config.properties" />

或者,您可以创建不同的构建配置,并在最终 WAR 中为每个构建配置仅包含一个属性(DEV、UAT、PROD)。在应用程序中配置设置如下内容:

<context:property-placeholder location="classpath*:*.properties" />

答案 2

转到$CATALINA_HOME,然后通过添加带有值的参数来编辑文件。如果要批量处理多个参数,请使用setenv.shspace

例如:

cd /opt/tomcat/bin/ 
sudo nano setenv.sh 

编辑行

CATALINA_OPTS="${CATALINA_OPTS}" 

CATALINA_OPTS="${CATALINA_OPTS} -Dparam=value -Dparam2=value2" 

重新启动雄猫:

service tomcat restart

您现在应该能够在运行时看到传递给tomcat的参数:

ps aux | grep tomcat

推荐