[英]Tomcat multiple instances simultaneously
我正在尝试运行Tomcat的多个实例,但即使在配置了不同的端口用于侦听和关闭第二个实例之后,它仍继续尝试侦听8080(配置为8081)。 我读到我必须为CATALINA_BASE
设置不同的值。 从所有在线文章中,没有一个实际显示在哪个文件中可以设置此变量。
我在何处以及如何在C:\\apache-tomcat-7.0.39
为我的Tomcat实例设置CATALINA_BASE
假设您在C:\\ apache-tomcat-7.0.39中只有一个Tomcat文件夹,并且您希望从中运行两个实例。
确保设置了CATALINA_HOME系统/用户变量,并指向C:\\ apache-tomcat-7.0.39
创建文件夹C:\\ instance1。 从C:\\ apache-tomcat-7.0.39复制conf , webapps和临时文件夹,并将它们粘贴到C:\\ instance1。 您可以从位于instance1下的webapps和临时文件夹中删除内容,但不要触摸conf内容。
现在复制>粘贴C:\\ instance1并将其重命名为instance2。 这样, instance1和instance2都将具有相同的内容。
转到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" />
将您想要的任何内容部署到instance1 \\ webapps和instance2 \\ webapps中
在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
我运行两个Tomcat副本的最简单方法涉及以下步骤(我试图运行两个不同版本的tomcat,6和7):
在不同的文件夹中建立2个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
如果尚未通过设置CATALINA_BASE目录为多个实例配置Tomcat,则$ CATALINA_BASE将设置为$ CATALINA_HOME的值,即已安装Tomcat的目录。
最简单的方法是下载另一个tomcat 8或9并安装它,同时安装更改所有端口号。 在server.xml中复制现有实例并更改端口号可能会导致服务出现一些错误。
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());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.