我正在尝试运行Tomcat的多个实例,但即使配置了不同的端口用于侦听和关闭第二个实例,它仍然会继续尝试侦听8080(配置为8081)。我读到我必须为CATALINA_BASE
设置不同的值。从所有在线文章中,没有一个实际显示在哪个文件中可以设置这个变量。
在C:\apache-tomcat-7.0.39
答案 0 :(得分:48)
假设您在 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 和 temp 文件夹,然后将其粘贴到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:\
<强> instance1_startup.bat 强>
@echo off
设置CATALINA_BASE = C:\ instance1
cd“%CATALINA_HOME%\ bin”
设置TITLE =我的Tomcat实例01
调用startup.bat%TITLE%
<强> instance1_shutdown.bat 强>
@echo off
设置CATALINA_BASE = C:\ instance1
cd“%CATALINA_HOME%\ bin”
调用shutdown.bat
<强> instance2_startup.bat 强>
@echo off
设置CATALINA_BASE = C:\ instance2
cd“%CATALINA_HOME%\ bin”
设置TITLE =我的Tomcat实例02
调用startup.bat%TITLE%
<强> instance2_shutdown.bat 强>
@echo off
设置CATALINA_BASE = C:\ instance2
cd“%CATALINA_HOME%\ bin”
调用shutdown.bat
答案 1 :(得分:31)
我运行两个Tomcat副本的最简单方法是执行以下步骤(我试图运行两个不同版本的tomcat,6和7):
在不同的文件夹中建立2个tomcat副本(如果它们是不同的版本那么这很容易,如果它们是相同的版本那么你需要以其他方式进行区分。有很多文件可以用Tomcat创建以管理它,因此可能无法运行具有相同工作目录的两个实例)
更改tomcat在server.xml
<Connector port="8080">
&lt; - 这是tomcat用于响应HTTP请求的端口<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
&lt; - 这定义了两个端口,一个用于AJP连接器(如果在Apache或IIS服务器后面使用tomcat,则使用)和用于HTTPS流量的端口<Server port="8005" shutdown="SHUTDOWN">
&lt; - 这是Tomcat用于响应SHUTDOWN事件的端口最后,如果您将其作为Windows服务运行,则需要为每个实例建立不同的服务名称(您可以在安装过程中执行此操作,Tomcat 7的默认设置为tomcat7)。一旦Tomcat运行,它的所有配置字段都使用相对路径,因此您无需触摸CATALINA_BASE
答案 2 :(得分:1)
如果尚未通过设置CATALINA_BASE目录为多个实例配置Tomcat,则$ CATALINA_BASE将设置为$ CATALINA_HOME的值,即您安装Tomcat的目录。
答案 3 :(得分:0)
最简单的方法是下载另一个tomcat 8或9,并在安装时更改所有端口号。在server.xml中复制现有实例并更改端口号可能会导致服务出现一些错误。
答案 4 :(得分:-1)
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());
}
}
}