实时更改Tomcat端口

问题描述:

我想将Tomcat v5.5端口存储在环境变量中,并让Tomcat侦听该端口。到目前为止,我可以看到更改端口的唯一方法是修改$ CATALINA_HOME/conf/server.xml。有没有办法通过在启动Tomcat时提供一个外部值来设置端口值?我在Solaris上运行Tomcat。实时更改Tomcat端口

创建一个脚本来启动Tomcat。在启动脚本中,导出JAVA_OPTS以为Tomcat属性port.http.nonssl指定一个值(请注意,无论您想要什么,都可以调用此属性)。

export JAVA_OPTS=-Dport.http.nonssl=${CATALINA_BASE_PORT} 

正如你所看到的,我已经设置port.http.nonssl环境变量${CATALINA_BASE_PORT}

然后,该脚本启动Tomcat的:

$CATALINA_HOME/bin/startup.sh 

现在,您需要更改Tomcat $CATALINA_HOME/conf/server.xml文件,使非SSL HTTP连接器使用port.http.nonssl属性而不是硬编码值。

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> 
<Connector port="${port.http.nonssl}" maxHttpHeaderSize="8192" 
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
      enableLookups="false" redirectPort="8443" acceptCount="100" 
      connectionTimeout="20000" disableUploadTimeout="true" /> 

现在Tomcat将使用在$ {} CATALINA_BASE_PORT环境变量定义的端口,只要你通过新的启动脚本启动它。

+3

更好一步(特别是如果在CATALINA_BASE中使用多个实例) 创建一个文件“setenv.sh”添加JAVA_OPTS行并将其放置在实例的bin目录中。 CATALINA_HOME/bin/setenv.sh或CATALINA_BASE/bin/setenv.sh – willCode4Beer 2009-09-03 19:04:50

这有点像使用大锤来破解螺母,但你可以使用嵌入在JBoss中的Tomcat,它具有统一的机制来替代任意配置文件中的系统属性,包括tomcat server.xml 。您的环境变量可以作为启动脚本中的系统属性传递(使用-D)。

JBoss的内核和tomcat的功能不多,所以你不需要运行整个拍摄比赛。但它仍然会比独立的Tomcat重得多。

+1

嗯,我觉得你说得对大锤 - 但也许我可以采取这个想法,并将Tomcat的startup.sh脚本包装在另一个脚本中,并在执行startup.sh之前将server.xml中的端口替换为我的环境变量。 – 2009-06-25 22:06:39

只是为了跟进马克·麦基弗的第一个答案,这里是我的start_solr.bat文件,指定一个端口和一个环境变量:

if "%1" == "" goto displayUsage 
set JAVA_OPTS=%JAVA_OPTS% -Dport.http.nonssl=%1 -Dsolr.solr.home=../../ 
call startup.bat 
goto end 

:displayUsage 
echo. 
echo Usage: start_solr.bat [port i.e. 9001] 
goto end 

:end 
cd "%CURRENT_DIR%"