将虚拟机parameter passing给Apache Tomcat

我有一个名为“-Dfolder”的虚拟机参数的webProject

我在applicationContext上使用这个参数是这样的:

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

在Eclipse中,为了testing,我使用“运行configuration”来设置这样的值:

 -Dfolder=Dev 

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

我怎么做?

我必须使用setenv.sh? 怎么样?。 有人可以给我和例子吗?

感谢和抱歉我的英语

我不知道你使用的是什么版本的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 =开发”

编辑:

对于Windows应该是这样的set CATALINA_OPTS="-Dfolder=Dev"

编辑:

在Spring配置中,您可以像使用$ {propertyname}一样使用系统属性,也可以包含带有属性定义的文件,并使用context:property-placeholder ,并且在该文件属性中定义的所有属性也都可以在配置中使用。

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

 set CATALINA_OPTS="-Dbuild=DEV" 

和applicationConfig.xml中

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

或者,您可以创建不同的构建配置,并在每个构建配置中仅包含一个属性(DEV,UAT,PROD)。 在applicationConfig中设置如下:

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

转到$ CATALINA_HOME并通过添加参数值来编辑setenv.sh文件。 如果要批量多个参数,请使用space分隔它们

例如

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

编辑该行

 CATALINA_OPTS="${CATALINA_OPTS}" 

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

重启tomcat:

 service tomcat restart 

你现在应该能够看到传递给tomcat的参数,当你运行:

 ps aux | grep tomcat 

通过在catalina.bat和startup.bat(如catalina.bat中推荐的)相同的目录中生成setenv.bat文件,并将其放入.bat的内容,使其在Windows中工作。

 set CATALINA_OPTS="-DyourVariableName=yourValue" 

就这样。 我喜欢这种方式,因为它看起来很干净