最近需要把两个项目同时部署到服务器上,于是研究了一下,页借鉴了很多别人的方法,把过程记录下来,以儆效尤。

目录:

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,过程如下。

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <Server port="8005" shutdown="SHUTDOWN">
  3. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  4. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  5. <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  6. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  7. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  8. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  9. <GlobalNamingResources>
  10. <Resource name="UserDatabase" auth="Container"
  11. type="org.apache.catalina.UserDatabase"
  12. description="User database that can be updated and saved"
  13. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
  14. pathname="conf/tomcat-users.xml" />
  15. </GlobalNamingResources>
  16. <!-- the first service-->
  17. <Service name="Catalina">
  18. <Connector port="80" protocol="HTTP/1.1"
  19. connectionTimeout="20000"
  20. redirectPort="8443" />
  21. <!-- 注释的地方-->
  22. <!--
  23. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  24. -->
  25. <Engine name="Catalina" defaultHost="localhost">
  26. <Realm className="org.apache.catalina.realm.LockOutRealm">
  27. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
  28. resourceName="UserDatabase"/>
  29. </Realm>
  30. <Host name="localhost"  appBase="webapps"
  31. unpackWARs="true" autoDeploy="true">
  32. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  33. prefix="localhost_access_log" suffix=".txt"
  34. pattern="%h %l %u %t "%r" %s %b" />
  35. </Host>
  36. </Engine>
  37. </Service>
  38. <!-- the second service-->
  39. <Service name="Catalina">
  40. <!-- 修改的地方-->
  41. <Connector port="8081" protocol="HTTP/1.1"
  42. connectionTimeout="20000"
  43. redirectPort="8443" />
  44. -->
  45. <!-- 注释的地方-->
  46. <!--
  47. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  48. -->
  49. <Engine name="Catalina" defaultHost="localhost">
  50. <Realm className="org.apache.catalina.realm.LockOutRealm">
  51. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
  52. resourceName="UserDatabase"/>
  53. </Realm>
  54. <!-- 修改的地方 appBase:第二个项目放置的位置-->
  55. <Host name="localhost"  appBase="webapps1"
  56. unpackWARs="true" autoDeploy="true">
  57. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  58. prefix="localhost_access_log" suffix=".txt"
  59. pattern="%h %l %u %t "%r" %s %b" />
  60. </Host>
  61. </Engine>
  62. </Service>
  63. </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>
&lt;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" /&gt;

</GlobalNamingResources>

<!-- the first service-->

<Service name="Catalina">

&lt;Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /&gt;

<!-- 注释的地方-->

<!--

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

-->

&lt;Engine name="Catalina" defaultHost="localhost"&gt;

  &lt;Realm className="org.apache.catalina.realm.LockOutRealm"&gt;

    &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/&gt;
&lt;/Realm&gt; &lt;Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"&gt; &lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /&gt; &lt;/Host&gt;
&lt;/Engine&gt;

</Service>

<!-- the second service-->

&lt;Service name="Catalina"&gt;
&lt;!-- 修改的地方--&gt;
&lt;Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /&gt;
--&gt;
&lt;!-- 注释的地方--&gt;

<!--

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

-->

&lt;Engine name="Catalina" defaultHost="localhost"&gt;

  &lt;Realm className="org.apache.catalina.realm.LockOutRealm"&gt;

    &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/&gt;
&lt;/Realm&gt;
&lt;!-- 修改的地方 appBase:第二个项目放置的位置--&gt;
&lt;Host name="localhost" appBase="webapps1"
unpackWARs="true" autoDeploy="true"&gt; &lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /&gt; &lt;/Host&gt;
&lt;/Engine&gt;

</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文件:

  1. <Server port="8005" shutdown="SHUTDOWN">把端口改为没有是使用的端口。
  2. <Connector port="8080" maxHttpHeaderSize="8192"
  3. maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  4. enableLookups="false" redirectPort="8443" acceptCount="100"
  5. connectionTimeout="20000" disableUploadTimeout="true" /> 把端口改为没有是使用的端口。
  6. <Connector port="8009"
  7. 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的更多相关文章

  1. 一个解决方案下的多个项目共享一个AssemblyInfo

    http://stackoverflow.com/questions/18963750/add-file-as-a-link-on-visual-studio-debug-vs-publish htt ...

  2. yabeblog.me 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问

    该内容来自 http://www.yabeBlog.me,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的 ...

  3. 准备开源用javascript写Tomcat下的WebApp的项目

    原创文章,转载请注明. 这个想法由来已久.用javascript编写Tomcat下的WebApp.现现在也有alpha版本号的实现. 这种话,前端程序猿就能够像用Node.js那样,用javascri ...

  4. houxiurong.com 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问

    该内容来自 http://houxiurong.com,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的w ...

  5. 从零部署Spring boot项目到云服务器(准备工作)

    自己的博客终于成功部署上线了,回过头来总结记录一下整个项目的部署过程! 测试地址:47.94.154.205:8084 注:文末有福利! 一.Linux下应用Shell通过SSH连接云服务器 //ss ...

  6. 从零部署Spring boot项目到云服务器(正式部署)

    上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...

  7. SpringBoot项目的云服务器部署

    1.场景还原 springboot配置相当简单,人人皆知.怎么把springboot工程部署到云服务器上呢?可能有人会说,博主你前篇不是讲了java工程的云部署把:但是我想澄清一点的是,我前篇的工程都 ...

  8. 【Spring Boot】Spring Boot之使用Alibaba Cloud Toolkit(Idea插件)本地一键部署Spring Boot项目到远程服务器

    一.Alibaba Cloud Toolkit(Idea插件)的安装 1)Alibaba Cloud Toolkit 介绍 Cloud Toolkit 是本地 IDE 插件,帮助开发者更高效地开发.测 ...

  9. Asp.net Core 项目API接口服务器部署

    Windows server 2008服务器部署: DotNetCore.1.0.0.RC2-WindowsHosting 或者DotNetCore.1.0.5_1.1.2-WindowsHostin ...

随机推荐

  1. HDU-2955 Robberies 浮点数01背包 自变量和因变量位置互换

    题目链接:https://cn.vjudge.net/problem/HDU-2955 题意 突然想找几个银行抢钱. 给出各银行的钱数和被抓的概率,以及能容忍的最大被抓概率. 问他最多能抢到多少钱? ...

  2. [读书笔记] R语言实战 (十四) 主成分和因子分析

    主成分分析和探索性因子分析是用来探索和简化多变量复杂关系的常用方法,能解决信息过度复杂的多变量数据问题. 主成分分析PCA:一种数据降维技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为 ...

  3. CSS隐藏overflow默认滚动条同时保留滚动效果

    主要应用于移动端场景,仿移动端滚动效果.对于隐藏滚动条,众所周知overflow:hidden,但是想要的滚动效果也没了. 所以对于移动端webkit内核提供一个伪类选择器: .element::-w ...

  4. linux环境下删除包含特殊字符的文件或目录

    linux环境下删除包含特殊字符的文件或目录 ls -liUse find command as follows to delete the file if the file has inode nu ...

  5. ASP.NET-关于Global.asax的作用

    这个文件相当于一个应用程序量级的 全局文件,比如你想写一个变量在项目中的所有文件中都能读取是就写在这里面 Application["name"] = "zhangran& ...

  6. 今天修了一个bug,关于debug日志的问题

    是别人的代码,很诡异. 就是开了debug日志,没问题. 关了debug日志,就出问题. 开始我以为是debug日志拖慢了速度,所以有一些竞态环境的影响. 后来发现是在debug日志里面有一些side ...

  7. AIX查看某个端口被哪个进程占用

    AIX查看某个端口被哪个进程占用 学习了:https://zhidao.baidu.com/question/1928716757722021467.html 1. netstat -Aan|grep ...

  8. 对苹果“五仁”编程语言Swift的简单分析

    对苹果"五仁"编程语言Swift的简单分析 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUHJvdGVhcw==/font/5a6L5 ...

  9. sql两个字段相加减,第三个字段没有值的原因.

    错误的写法:(in_story_num-out_story_num) as story_num 正确的写法:(nvl(in_story_num,0)-nvl(out_story_num,0)) as ...

  10. JAVA性能优化的五种方式

    一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...