一个tomcat下部署多个项目或一个服务器部署多个tomcat
近期为了实现两个项目的同步部署需求,在服务器平台上进行了深入研究,并在此过程中参考了许多现有的解决方案。具体操作步骤已详细记录下来,并作为警示供其他技术人员参考。
目录:
1,一个tomcat下同时部署两个项目(多个项目可以参考)
1.1项目都放在webapps内(共用一个端口)
1)把两个项目都放在webapps下。
2)处理重复jar包。
3)tomcat端口默认为8080.如果想修改可以去conf下的server.xml中进行修改
4)启动tomcat
1.2 创建多个类似于WebApps的目录,并在配置文件server.xml中进行相应设置(每个项目分配不同的端口号)
在位于tomcat webapps目录下的相同层级创建一个新文件夹命名为webapps1并将第一个项目放置于该文件夹中随后再创建一个名为webapps2的新文件夹并放入第二个项目。
如同步骤1.1中的第二步所述:处理重复使用的JAR包。
更新并重新配置server.xml文件以设置所需端口及其他相关信息。
4)启动tomcat.
2,一台服务器上同时运行2个tomcat.(多个应该类似)
压缩版tomcat无法配置安装版相关设置。
第一个tomcat配置保持不变。
新增环境变量CATALINA_HOME2和CATAL INA_BASE2,并分别设置为新tomcat的位置地址。
对新tomcat启动及停止脚本进行更新,请将其中所有的CATAL INA_HOME替换为CATAL INA_HOME2。
对升级启动脚本catalina.bat进行调整,请将其中所有的CAT ALIN A_HOM E替换为CA TALKA IN _HOME ₂,并将CA TAINA _BASE也相应更改为CA TAINA _BASE₂。
修改conf/server.xml文件:
2.7成功!
在一个tomcat环境中同时部署两个项目(多个项目可作为参考)。将两个项目放置于webapps目录下(使用同一个端口)。将这两个项目放置在webapps目录中。如果这两个项目的jar包存在重复内容,则需进行处理以避免服务器内存溢出,并排除类似http-bio-8080"-exec-1等异常。建立共享包路径设置即可解决此问题。修改catalina.properties文件中的common.loader属性值,并在此基础上增加必要的配置项。
“${catalina.home}/lib/shared/*.jar”,然后启动tomcat。很显然,
需要将共享的jar包放到一个
在创建好共享文件夹后,
首先将shared目录中的内容复制到tomcat的lib目录下。
接着,在创建好共享文件夹后,
将相同的包都放置于shared目录内,
并确保每个项目的WEB-INF下的lib分别存放各自独有的依赖项。
3)tomcat端口默认为8080.如果想修改可以去conf下的server.xml中进行修改
1.2 创建多个与WebApps类似的目录结构,并以conf下的server.xml为配置依据(建议每个项目均设置不同的端口号)
- 在 tomcat 的 webapps 目录下新增 webapps 子目录,在其中放置第一个项目;
- 参考步骤 1.1 的第二步:处理重复的JAR包;
- 更新 server.xml 文件内容,并设置相应的端口号及其他必要的信息;
A部分首先需了解 tomcat 的几个主要使用的端口号:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="60000"
redirectPort="8443" disableUploadTimeout="false"
executor="tomcatThreadPool" URIEncoding="UTF-8"/>
其中8080为HTTP端口,8443为HTTPS端口。
8005为远程停服务端口
8009为AJP端口,APACHE能过AJP协议访问TOMCAT的8009端口。
b,修改server.xml. 主要操作是在server目录中新增一个service。这个过程主要集中在Connector部分的端口配置上。这些改动将影响到咱们方法所使用的HTTP连接端口。
注释掉8009AJP端口,修改host下的
appBase为对应的webapps,过程如下。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- the first service-->
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- 注释的地方-->
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
31. -->
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
<!-- the second service-->
<Service name="Catalina">
<!-- 修改的地方-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- 注释的地方-->
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
67. -->
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- 修改的地方 appBase:第二个项目放置的位置-->
<Host name="localhost" appBase="webapps1"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
可以看到,在第一个service中仅仅需要关闭掉相关的配置项即可。若不关闭该配置项,则该端口将无法正常运行,其余的部分无需做任何调整。
第二个service为第一个service的副本,
在其中修改80端口为8081.host的appBase修改为自己对应的位置。
如果想部署多个项目,再次增加service节点即可。
4),启动tomcat
2)同一台服务器上同时支持两个Tomcat实例。
当在一台机器上已部署一个Tomcat服务时,请确保其配置正确,并且无论该Tomcat是否已注册为Windows服务或未注册时。
无论是否注册了系统服务都不会产生影响。都可通过以下步骤进行配置。
当该tomcat已成功注册为Windows服务时,在Windows环境中无法找到CATALINA_HOME和CATALINA_BASE参数。
同样地,请按照以下方法完成设置。
一旦第一个tomcat启动后
后来在dos下运行才发现所有的tomcat都会去找
CATALINA_HOME和CATALINA_BASE这两个环境变量,因此步骤如下:
2.1.使用压缩版的tomcat不能使用安装版的。
2.2.第一个tomcat的配置不变。
2.3.增加环境变量CATALINA_HOME2,值为新的tomcat的地址;增加环境变量CATALINA_BASE2,值为新的tomcat的地址。
2.4.修改新的tomcat中的startup.bat、shutdown.bat,把其中的CATALINA_HOME改为CATALINA_HOME2。
2.5.修改新的tomcat中的catalina.bat,把其中的CATALINA_HOME改为CATALINA_HOME2,CATALINA_BASE改为CATALINA_BASE2。
2.6.修改conf/server.xml文件:
<Server port="8005" shutdown="SHUTDOWN">把端口改为没有是使用的端口。
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" /> 把端口改为没有是使用的端口。
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 把端口改为没有是使用的端口。
2.7成功!
总结经验:在遇到问题时
