我试图运行Tomcat的多个实例,但即使监听配置不同的端口,并关闭第二个实例后,它一直试图监听8080(配置为8081)。 我读,我必须设置不同的值CATALINA_BASE
。 从所有有网上的文章,他们没有实际在该文件中这个变量可以设置。
在哪里,我怎么能在设置CATALINA_BASE我的Tomcat实例C:\apache-tomcat-7.0.39
我试图运行Tomcat的多个实例,但即使监听配置不同的端口,并关闭第二个实例后,它一直试图监听8080(配置为8081)。 我读,我必须设置不同的值CATALINA_BASE
。 从所有有网上的文章,他们没有实际在该文件中这个变量可以设置。
在哪里,我怎么能在设置CATALINA_BASE我的Tomcat实例C:\apache-tomcat-7.0.39
我已经运行Tomcat的两个副本的最简单方法涉及以下步骤(我试图运行Tomcat 6的两个不同的版本和7):
建立tomcat的2份不同的文件夹(如果它们是不同的版本,那么这很容易,如果它们是相同的版本,那么你将需要一些其他的方式来区分。有很多文件,这些文件的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用于关机事件做出响应的端口 最后,如果你正在运行此作为Windows服务,你需要为每个实例建立不同的服务名称(您可以在安装过程中做到这一点,为Tomcat 7的默认是tomcat7)。 一旦Tomcat的运行它的所有配置字段使用相对路径,所以你并不需要接触CATALINA_BASE
比方说,你有位于C只有一个Tomcat的文件夹:\ Apache的Tomcat的7.0.39,而且你希望从它运行的两个实例。
请确保您有CATALINA_HOME系统/用户变量集,并指向C:\ Apache的Tomcat的7.0.39
创建一个文件夹C:\ INSTANCE1。 从C复制的conf,web 应用和临时文件夹:\ Apache的Tomcat的7.0.39,并将其粘贴到C:\ INSTANCE1。 您可以删除位于下INSTANCE1的webapps和临时文件夹的内容,但不接触的conf目录。
现在,复制>粘贴C:\ INSTANCE1,并改名为实体2。 这样一来,既INSTANCE1和INSTANCE2将具有相同的内容。
转到C:\ INSTANCE2 \ CONF,编辑server.xml中和更改这些端口(I那些标记为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 \ web应用和INSTANCE2 \ web应用
创建C在以下4个批处理文件:\
instance1_startup.bat
@回响
设置CATALINA_BASE = C:\ INSTANCE1
CD “%CATALINA_HOME%\ BIN”
设置TITLE =我的Tomcat实例01
打电话的startup.bat%TITLE%
instance1_shutdown.bat
@回响
设置CATALINA_BASE = C:\ INSTANCE1
CD “%CATALINA_HOME%\ BIN”
呼叫shutdown.bat
instance2_startup.bat
@回响
设置CATALINA_BASE = C:\ INSTANCE2
CD “%CATALINA_HOME%\ BIN”
设置TITLE =我的Tomcat实例02
打电话的startup.bat%TITLE%
instance2_shutdown.bat
@回响
设置CATALINA_BASE = C:\ INSTANCE2
CD “%CATALINA_HOME%\ BIN”
呼叫shutdown.bat
如果你还没有通过设置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());
}
}
}