同时Tomcat多个实例

我试图运行Tomcat的多个实例,但是即使在configuration不同的端口用于监听和closures第二个实例之后,它仍然试图在8080上进行监听(为8081configuration)。 我读过,我必须为CATALINA_BASE设置不同的值。 从所有文章都有在线,没有一个实际显示在哪个文件中可以设置这个variables。

我在哪里以及如何在C:\apache-tomcat-7.0.39为我的Tomcat实例设置CATALINA_BASE

我运行两个Tomcat的最简单的方法涉及以下步骤(我试图运行两个不同版本的tomcat,6和7):

  • 在不同的文件夹中建立两个tomcat副本(如果它们是不同的版本,那么这很容易,如果它们是相同的版本,那么你需要以其他方式加以区分)Tomcat创建了很多文件来管理它,具有相同工作目录的两个实例可能是不可能的)

  • 更改tomcat在server.xml侦听的以下端口

    • <Connector port="8080"> < – 这是tomcat用来响应HTTP请求的端口
    • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> < – 这个定义了两个端口,一个用于AJP连接器(如果你使用Apache或IIS服务器时使用tomcat)用于HTTPS流量
    • <server port="8005" shutdown="SHUTDOWN"> < – 这是Tomcat用来响应SHUTDOWN事件的端口

最后,如果您将此服务作为Windows服务运行,则需要为每个实例建立不同的服务名称(您可以在安装期间执行此操作,Tomcat 7的默认设置为tomcat7)。 一旦Tomcat运行所有的配置字段,使用相对路径,所以你不需要触摸CATALINA_BASE

假设你在C:\ apache-tomcat-7.0.39中只有一个Tomcat文件夹,并且你希望从它运行两个实例。

确保你有CATALINA_HOME系统/用户变量集,并指向C:\ apache-tomcat-7.0.39

  1. 创建一个文件夹C:\ instance1。 从C:\ apache-tomcat-7.0.39复制confwebapps临时文件夹并将它们粘贴到C:\ instance1。 您可以删除位于instance1下的webapps和temp文件夹中的内容,但不要触及conf内容。

  2. 现在复制>粘贴C:\ instance1并将其重命名为instance2。 这样, instance1instance2将具有相同的内容。

  3. 转到C:\ instance2 \ conf,编辑server.xml并更改这些端口的号码(我将它们标记为XXXX):

    <server port="XXXX" shutdown="SHUTDOWN">

    <Connector port="XXXX" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

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

  4. 部署任何你想要的实例1 \ webapps和instance2 \ webapps

  5. 在C:\下创建以下4个批处理文件

instance1_startup.bat

@echo关闭

设置CATALINA_BASE = C:\ instance1

cd“%CATALINA_HOME%\ bin”

设置TITLE =我的Tomcat实例01

调用startup.bat%TITLE%

instance1_shutdown.bat

@echo关闭

设置CATALINA_BASE = C:\ instance1

cd“%CATALINA_HOME%\ bin”

调用shutdown.bat

instance2_startup.bat

@echo关闭

设置CATALINA_BASE = C:\ instance2

cd“%CATALINA_HOME%\ bin”

设置TITLE =我的Tomcat实例02

调用startup.bat%TITLE%

instance2_shutdown.bat

@echo关闭

设置CATALINA_BASE = C:\ instance2

cd“%CATALINA_HOME%\ bin”

调用shutdown.bat

  1. 运行instance1_startup.batinstance2_startup.bat ,希望它能工作。

如果您尚未通过设置CATALINA_BASE目录将Tomcat配置为多个实例,那么$ CATALINA_BASE将被设置为$ CATALINA_HOME(您已经安装了Tomcat的目录)的值。

 1. 1st create one bat file(tomcat-start1.bat) and add the below code and keep this bat file in any location.create instance(a folder having with webapps, config, bin folders) or give directly location in "newins" tomcat folder. and change the port numbers as 8181 in server.xml. @echo off set javabin=C:\Program Files\Java\jdk1.8.0_101\bin set apachehom=E:\Apache Tomcat 8.0.15 set newins=E:\my_instance_1 (or)E:\Apache Tomcat 8.0.15 start "Tomcat 01" "%javabin%\java.exe" ^ -Djava.util.logging.config.file="%apachebas%\conf\logging.properties" ^ -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ^ -Djava.util.logging.config.file="%apachebas%\conf\logging.properties" ^ -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ^ -Djava.endorsed.dirs="%apachehom%\endorsed" ^ -classpath "%apachehom%\bin\bootstrap.jar;%apachehom%\bin\tomcat-juli.jar" ^ -Dcatalina.base="%newins%" ^ -Dcatalina.home="%apachehom%" ^ -Djava.io.tmpdir="%apachebas%\temp" ^ org.apache.catalina.startup.Bootstrap start exit 2. create java class and add this code and run import java.io.IOException; import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ @Controller @RequestMapping("/hello") public class TomcatInstance { @RequestMapping(method = RequestMethod.GET) public void printHello(ModelMap model) { Runtime runtime = Runtime.getRuntime(); try { Process p1 = runtime.exec("cmd /c start E:\\Jammulaiah\\Sample\\tomcat-start1.bat"); InputStream is = p1.getInputStream(); int i = 0; StringBuffer sb=new StringBuffer(); while ((i = is.read()) != -1) { sb.append((char) i); System.out.println(sb.toString()); } } catch (IOException ioException) { System.out.println(ioException.getMessage()); } } }