我试图找出 Apache Tomcat 变量CATALINA_OPTS
和SOJAVA_OPTS
之间的区别,并且惊讶地发现这里还没有发布任何问题/答案。所以我想在发现差异后在这里分享它(有答案)。检查下面的答案/差异。
注意:在发布这篇文章时,我们在 CentOS5 64 位架构上运行带有 JDK 6u32 的 Apache Tomcat v6.0.10。
有两个环境变量 -CATALINA_OPTS
和JAVA_OPTS
- 都用于 Tomcat 的catalina.sh启动和关闭脚本。它们在该文件的注释中描述为:
[JAVA_OPTS]:(可选)执行“start”、“stop”或“run”命令时使用的 Java 运行时选项
和
[CATALINA_OPTS]:(可选)执行“start”或“run”命令时使用的 Java 运行时选项
那么为什么会有两个不同的变量呢?有什么区别?
首先,在 EITHER 变量中指定的任何内容都被传递给启动 Tomcat 的命令——“start”或“run”命令——但只有 JAVA_OPTS 中设置的值被传递给“stop”命令。这可能对 Tomcat 在实践中的运行方式没有任何影响,因为它只影响运行的结束,而不是开始。
第二个区别更微妙。其他应用程序也可能使用 JAVA_OPTS,但只有 Tomcat 会使用 CATALINA_OPTS。因此,如果您设置的环境变量仅供 Tomcat 使用,您最好使用 CATALINA_OPTS,而如果您设置的环境变量也可供其他 java 应用程序使用,例如 JBoss,您应该将您在 JAVA_OPTS 中的设置。
在关机期间,tomcat 启动多个 vm,正如 @joao 的评论中所解释的那样。如果您在 tomcat 关闭期间记录一些数据,请使用 CATALINA_OPTS 而不是 JAVA_OPTS。一个很好的例子是当我想在 jacoco.exec 期间保存数据时,我应该使用 CATALINA_OPTS 而不是 JAVA_OPTS。
我想补充一点JAVA_OPTS
,CATALINA_OPTS
它们是相辅相成的:如果你定义了两个环境变量,两者的内容将被连接起来并传递给start
andrun
命令——正如上面 Gnanam 所解释的那样。
也可以参考catalina.sh的原始出处