2009-06-25 144 views
4

我想將Tomcat v5.5端口存儲在環境變量中,並讓Tomcat偵聽該端口。到目前爲止,我可以看到更改端口的唯一方法是修改$ CATALINA_HOME/conf/server.xml。有沒有辦法通過在啓動Tomcat時提供一個外部值來設置端口值?我在Solaris上運行Tomcat。實時更改Tomcat端口

回答

17

創建一個腳本來啓動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

0

這有點像使用大錘來破解螺母,但你可以使用嵌入在JBoss中的Tomcat,它具有統一的機制來替代任意配置文件中的系統屬性,包括tomcat server.xml 。您的環境變量可以作爲啓動腳本中的系統屬性傳遞(使用-D)。

JBoss的內核和tomcat的功能不多,所以你不需要運行整個拍攝比賽。但它仍然會比獨立的Tomcat重得多。

+1

嗯,我覺得你說得對大錘 - 但也許我可以採取這個想法,並將Tomcat的startup.sh腳本包裝在另一個腳本中,並在執行startup.sh之前將server.xml中的端口替換爲我的環境變量。 – 2009-06-25 22:06:39

1

只是爲了跟進馬克·麥基弗的第一個答案,這裏是我的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%"