将 Tomcat 安装为 windows 服务时设置 JAVA_OPTS

Setting JAVA_OPTS while installing Tomcat as windows service

我在同一台主机上有 运行 多个 Tomcat 实例,并将它们安装为 windows 服务。当然,每个 Tomcat 实例都有不同的端口。现在我试图从 server.xml 文件中提取端口号并尝试将它们作为 JVM 选项传递,以便 server.xml 文件对于所有 Tomcat 实例看起来都一样。目前,我的 server.xml 文件中每个实例的连接器端口如下所示:

实例 1

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

实例 2

<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

我正在努力让它看起来像

<Connector port="${port.http}" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

如本 answer 中所述,我可以手动编辑选项以添加参数 -Dport.http=8080-Dport.http=8180,它工作正常,但我需要的是这个 JVM 选项当 Tomcat 作为 windows 服务安装时设置。

以下是 .bat 文件的内容 我正在 运行 安装 Tomcat instance1 作为 windows 服务(除了 CATALINA_BASE instance2 是一样的、端口和服务名称)。如您所见,我也试图在 JAVA_OPTS 作为服务安装之前设置它,但我似乎没有任何运气。我也用双引号试过 CALL SET "JAVA_OPTS=-Dport.http=8080"CALL SET JAVA_OPTS="-Dport.http=8080"

CALL SET JAVA_HOME=D:\Java
CALL SET CATALINA_BASE=D:\instance1
CALL SET JAVA_OPTS=-Dport.http=8080
CALL CD %CATALINA_HOME%\bin
service install instance1

有人可以帮忙吗?

如果您想将 -D 选项设置为标题中的状态而不是您对 --JvmOptions https://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html

感兴趣

例如

Install the service named 'Tomcat7'
C:\> tomcat7 //IS//Tomcat7 --DisplayName="Apache Tomcat 7" ^
     --Install="C:\Program Files\Tomcat\bin\tomcat7.exe" --Jvm=auto ^
     --StartMode=jvm --StopMode=jvm ^
     --JvmOptions -DwhateverHere
     --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^
     --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop

最终我可以通过在我用来安装 'Tomcat' 作为 windows 服务的批处理文件中设置 JvmArgs 来解决它。我的 .bat 文件的内容如下所示:

CALL SET JAVA_HOME=D:\Java
CALL SET CATALINA_BASE=D:\instance1
CALL SET JAVA_OPTS=-Dport.http=8080
CALL SET JvmArgs=-Dport.http=8080;-Dport.shutdown=8005 // This line did the trick
CALL CD %CATALINA_HOME%\bin
service install instance1

我在检查 service.bat 文件中的代码以检查 JVM 选项的设置方式时发现了这一点,并发现 %JvmArgs% 附加在末尾,如下所示:

--JvmOptions "-Dcatalina.home=%CATALINA_HOME%;-Dcatalina.base=%CATALINA_BASE%;-D%ENDORSED_PROP%=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;%JvmArgs%" ^

希望这对寻找类似配置的人有所帮助:)

如果您仔细阅读 https://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html 中有关 jvmoptions 的详细信息,您会看到它说它在 exe 模式下不起作用。我已经证实了这一点。即使该值出现在 tomcat6w 中,它也不能在 catalina.properties 中使用。事实上,甚至 tomcat 8 & 9 也陈述了同样的事情。如果有人能证明我错了,我会很高兴。探索仍在继续....