一个tomcat下部署多个项目或一个服务器部署多个tomcat
最近需要把两个项目同时部署到服务器上,于是研究了一下,页借鉴了很多别人的方法,把过程记录下来,以儆效尤。
目录:
1,一个tomcat下同时部署两个项目(多个项目可以参考)
1.1项目都放在webapps内(共用一个端口)
1)把两个项目都放在webapps下。
2)处理重复jar包。
3)tomcat端口默认为8080.如果想修改可以去conf下的server.xml中进行修改
4)启动tomcat
1.2建立多个类似于webapps的文件夹,通过conf下的server.xml进行配置(每个项目使用不同端口)
1)在tomcat的webapps同一层目录下新建webapps1文件夹,webapps放入第一个项目,webapps2放入第二个项目。
2)同1.1第二步:处理重复jar包。
3)修改server.xml文件,设置端口等信息。
4)启动tomcat.
2,一台服务器上同时运行2个tomcat.(多个应该类似)
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文件:
2.7成功!
1,一个tomcat下同时部署两个项目(多个项目可以参考)
1.1项目都放在webapps内(共用一个端口)
1)把两个项目都放在webapps下。
2)处理重复jar包。
两个项目如果有重复的jar包,一定要进行处理,否则会导致服务器内存耗尽,报类似于http-bio-8080"-exec-1等异常。
解决方案:建立共享包路径。
参考文章:https://my.oschina.net/angerbaby/blog/271438
我采用第一种:
修改catalina.properties中的common.loader属性。在common.loader属性原值基础上追加
“${catalina.home}/lib/shared/*.jar”,然后启动tomcat。很显然,
需要将共享的jar包放到一个
shared目录里,然后将shared目录放到tomcat下lib目录里。
建立好共享文件夹之后,把相同的包都放在共享文件夹,每个项目WEB-INF下的lib放各自独有的。
3)tomcat端口默认为8080.如果想修改可以去conf下的server.xml中进行修改
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4)启动tomcat
1.2建立多个类似于webapps的文件夹,通过conf下的server.xml进行配置(每个项目使用不同端口)
1)在tomcat的webapps同一层目录下新建webapps1文件夹,webapps放入第一个项目,webapps2放入第二个项目。
2)同1.1第二步:处理重复jar包。
3)修改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端口。
<Server port="8005" shutdown="SHUTDOWN">
8005为远程停服务端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
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" />
- -->
- <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" />
- -->
- <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>
<?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" />-->
<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" />-->
<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中只需要注释掉8009那部分。如果不注释会发生端口被占用的情况,其他不用改变,
第二个service为第一个service的副本,
在其中修改80端口为8081.host的appBase修改为自己对应的位置。
如果想部署多个项目,再次增加service节点即可。
4),启动tomcat
2,一台服务器上同时运行2个tomcat.(多个应该类似)
如果现在一台机器上已经部署了一个tomcat服务,无论这个tomcat是否已经注册为服务了,或者没有注册windows服务,
或者注册了,都没关系。都可以采用下面的方法实现。
如果该tomcat已经注册为windows服务了,从window的环境变量中找不到
CATALINA_HOME和CATALINA_BASE,也可以采用下面的方式实现。
当第一个tomcat启动后,后面tomcat的server.xml中的端口不管怎么改,仍然会报端口冲突。
后来在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" /> 把端口改为没有是使用的端口。
<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成功!
总结:在遇到问题时,首先应分析问题产生的原因,然后整理解决的思路,思路很重要,如何分析呢,看日志,重要的事情说三遍,看日志,看日志,see logs。然后根据相应信息查找问题原因,参考别人的意见时,也要结合自己的实际情况。最主要的是不要怕错,动手去做。你想拥有你从未拥有的东西,就要去做你从未做过的事。加油。
一个tomcat下部署多个项目或一个服务器部署多个tomcat的更多相关文章
- 一个解决方案下的多个项目共享一个AssemblyInfo
http://stackoverflow.com/questions/18963750/add-file-as-a-link-on-visual-studio-debug-vs-publish htt ...
- yabeblog.me 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问
该内容来自 http://www.yabeBlog.me,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的 ...
- 准备开源用javascript写Tomcat下的WebApp的项目
原创文章,转载请注明. 这个想法由来已久.用javascript编写Tomcat下的WebApp.现现在也有alpha版本号的实现. 这种话,前端程序猿就能够像用Node.js那样,用javascri ...
- houxiurong.com 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问
该内容来自 http://houxiurong.com,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的w ...
- 从零部署Spring boot项目到云服务器(准备工作)
自己的博客终于成功部署上线了,回过头来总结记录一下整个项目的部署过程! 测试地址:47.94.154.205:8084 注:文末有福利! 一.Linux下应用Shell通过SSH连接云服务器 //ss ...
- 从零部署Spring boot项目到云服务器(正式部署)
上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...
- SpringBoot项目的云服务器部署
1.场景还原 springboot配置相当简单,人人皆知.怎么把springboot工程部署到云服务器上呢?可能有人会说,博主你前篇不是讲了java工程的云部署把:但是我想澄清一点的是,我前篇的工程都 ...
- 【Spring Boot】Spring Boot之使用Alibaba Cloud Toolkit(Idea插件)本地一键部署Spring Boot项目到远程服务器
一.Alibaba Cloud Toolkit(Idea插件)的安装 1)Alibaba Cloud Toolkit 介绍 Cloud Toolkit 是本地 IDE 插件,帮助开发者更高效地开发.测 ...
- Asp.net Core 项目API接口服务器部署
Windows server 2008服务器部署: DotNetCore.1.0.0.RC2-WindowsHosting 或者DotNetCore.1.0.5_1.1.2-WindowsHostin ...
随机推荐
- 模板 NTT 快速数论变换
NTT裸模板,没什么好解释的 这种高深算法其实也没那么必要知道原理 #include <cstdio> #include <cstring> #include <algo ...
- VUE:过滤器及日期格式化moment库
VUE:过滤器及日期格式化moment库 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- where和having
where可以不能使用别名作为过滤条件,而having可以使用别名作为过滤条件. 在ORACLE中,select 语句的执行顺序是: 1. from语句 2. where语句(结合条件) 3. sta ...
- javaScript将string转换成array,并将汉字按汉语拼音排序方法
亲测,代码如下: var str = '中华人民共和国民主富强': var arr = str.split("");//字符串装换数组方法一 //arr = str.replace ...
- idea 编辑器 光标问题!(insert键)
今天写代码不小心按了键盘的insert键,光标莫名闪退了 ,重新打开的时候发现 光标变成了 按了insert 的效果 ,简直无语的要命啊! 这敲代码太恶心了!怒搜资料 结果找到了解决办法! 1.打 ...
- ASP.NET-viewBag Viewdata Tempdata
ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据. ViewData和ViewBag很相似,而TempData有 ...
- [Angular] Provide Feedback to Progress Events with Angular’s HttpRequest Object
In some cases your application might need to upload large amounts of data, such as files. Obviously ...
- java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】
DAO Data Access Object(数据訪问接口) 一.场景和问题 在Java程序中.常常须要把数据持久化,也须要获取持久化的数据.可是在进行数据持久化的过程中面临诸多问题(如:数据源 不同 ...
- NOIP2017提高组模拟赛 8(总结)
NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...
- ios修改了coredata数据结构后,更新安装会闪退
如果iOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表.字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下: 1.选中你的mydata.xc ...