【问题标题】:Pass VM Argument to Apache Tomcat [duplicate]将 VM 参数传递给 Apache Tomcat [重复]
【发布时间】:2012-09-06 14:15:39
【问题描述】:

我有一个带有名为“-Dfolder”的 VM 参数的 webProject

我像这样在 applicationContext 上使用该参数:

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

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

-Dfolder=Dev

现在,我想在 Apache Tomcat 上测试我的 webapp,所以我需要设置/发送文件夹 VM Argument。

我该怎么做?

我必须使用 setenv.sh?如何?。谁能给我和例子?

感谢和抱歉我的英语

【问题讨论】:

  • 我认为你应该尝试使用ServletContext参数,因为它是一个网络项目。
  • 我认为这不是我需要的。我需要在 apache 上为 WAR 设置值,而不是在开发中。我还需要不时更改开发、测试和演示环境的值。还是谢谢
  • 这就是 web.xml 文件存在的原因。它是一个部署描述符,故意与代码分开。

标签: java apache tomcat


【解决方案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"

编辑:

对于 Windows,它应该类似于 set CATALINA_OPTS="-Dfolder=Dev"

编辑:

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

例如,您有基本集属性:config.properties,以及带有数据库连接设置的文件集(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" />

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

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

【讨论】:

  • 我正在使用 Apache Tomcat 7。我正在使用 VM Argument,因为我需要读取 Log4j.properties 和 JDBC.properties 路径的“部分”。所以我尝试使用 applicationContext 并且无法使其工作。我现在就试试你的答案。非常感谢
  • 另外,我正在使用 Windows。我必须使用 catalina.sh 还是 catalina.BAT?
  • 你是用maven还是ant来构建的?另一种解决方案 - 为不同的环境创建不同的构建配置,并设置您在构建过程中需要的所有 .properties。我知道 Jenkins 允许轻松配置它。 (如果你使用 Jenkins 作为 CI 服务器)
  • 对于 Windows,它应该是 set CATALINA_OPTS="-Dfolder=Dev",而不是 CATALINA_OPTS="-Dfolder=Dev"
  • 评论应该已经有了,我是从原始 catalina.sh 复制的。
【解决方案2】:

转到 $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

【讨论】:

  • 赞成,因为该用户展示了一个包含多个参数的示例。我习惯使用 Tomcat 配置 gui,从那里看参数是空格分隔的并不明显。
【解决方案3】:

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

set CATALINA_OPTS="-DyourVariableName=yourValue"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-06-27
    • 2019-11-03
    • 2021-08-02
    相关资源
    最近更新 更多