Windows Tomcat同时具有多个实例

Windows Tomcat同时具有多个实例,windows,tomcat,multiple-instances,catalina,Windows,Tomcat,Multiple Instances,Catalina,我试图运行Tomcat的多个实例,但即使在配置了不同的端口以侦听和关闭第二个实例之后,它仍在尝试在8080上侦听(配置为8081)。我读到我必须为CATALINA\u BASE设置一个不同的值。从所有在线文章中,没有一篇真正显示可以在哪个文件中设置此变量 在哪里以及如何在C:\apache-Tomcat-7.0.39中为我的Tomcat实例设置CATALINA\u BASE如果您没有通过设置CATALINA\u BASE目录为多个实例配置Tomcat,那么$CATALINA\u BASE将设置为

我试图运行Tomcat的多个实例,但即使在配置了不同的端口以侦听和关闭第二个实例之后,它仍在尝试在8080上侦听(配置为8081)。我读到我必须为
CATALINA\u BASE
设置一个不同的值。从所有在线文章中,没有一篇真正显示可以在哪个文件中设置此变量


在哪里以及如何在
C:\apache-Tomcat-7.0.39

中为我的Tomcat实例设置CATALINA\u BASE如果您没有通过设置CATALINA\u BASE目录为多个实例配置Tomcat,那么$CATALINA\u BASE将设置为$CATALINA\u HOME的值,安装Tomcat的目录。

我运行两个Tomcat副本的最简单方法包括以下步骤(我尝试运行两个不同版本的Tomcat,6和7):

  • 在不同的文件夹中建立tomcat的两个副本(如果它们是不同的版本,那么这很容易,如果它们是相同的版本,那么您需要以其他方式进行区分。tomcat创建了许多文件来管理它,因此不可能使用相同的工作目录运行两个实例)

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


    • 假设您只有一个Tomcat文件夹位于C:\apache-Tomcat-7.0.39中,并且希望从中运行两个实例

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

    • 创建文件夹C:\instance1。从C:\apache-tomcat-7.0.39复制confwebappstemp文件夹,并将它们粘贴到C:\instance1。您可以从instance1下的webapps和temp文件夹中删除内容,但不要触摸confcontents

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

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

    • 在instance1\webapps和instance2\webapps中部署您想要的任何内容

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

    • 实例1\u启动.bat

      @回音

      设置CATALINA_BASE=C:\instance1

      cd“%CATALINA\u HOME%\bin”

      set TITLE=我的Tomcat实例01

      调用startup.bat%TITLE%

      实例1\u关机。bat

      @回音

      设置CATALINA_BASE=C:\instance1

      cd“%CATALINA\u HOME%\bin”

      呼叫shutdown.bat

      实例2\u启动.bat

      @回音

      设置CATALINA_BASE=C:\instance2

      cd“%CATALINA\u HOME%\bin”

      set TITLE=我的Tomcat实例02

      调用startup.bat%TITLE%

      实例2\u关机。bat

      @回音

      设置CATALINA_BASE=C:\instance2

      cd“%CATALINA\u HOME%\bin”

      呼叫shutdown.bat

    • 运行instance1\u startup.batinstance2\u startup.bat,希望它能工作

    • 最简单的方法是下载另一个tomcat 8或9,并在安装时安装它,更改所有端口号。复制现有实例并更改server.xml中的端口号可能会导致服务出现一些错误。

      [CATALINA_BASE在此处详细解释][1][1]:它实际上没有告诉在何处以及如何设置变量。我认为更简单的方法是按照此处所述再次为tomcat 7运行安装程序。“我正在尝试运行tomcat的多个实例”适用于tomcat 6,但您仍然可以使用它。是的,这是我第一次尝试的。我有两个文件夹,其中包含两个不同版本的tomcat,即7.0.37和7.0.39。但是,即使我在.39上编辑了
      server.xml
      之后,它仍在尝试侦听8080和其他默认端口。如果您更改服务器端口和两个连接器端口,我可以确认这将正常工作。在我正在键入的计算机上,有一台tomcat7在端口80上侦听,另一台tomcat6在端口8080上侦听。不要忘记,您需要重新启动Tomcat服务器以加载在Server.xml中所做的更改。这应该是最简单的方法。我不知道为什么我需要费心下载多个版本的tomcat。谢谢,戈兰!这一个给出了具体的解决方案。非常详细和有用的解决方案。感谢您在我的具体案例中,我需要两个不同的主要版本(当时是6和7),这种方法可以让您从同一个安装中运行不同的应用程序上下文(可能是两个预期以ROOT.war运行的应用程序),对于这种方法,我倾向于只添加多个
      元素,并使用主机名来区分它们,甚至使用多个
      来区分端口。我遵循了相同的步骤,但当我关闭实例2时,它关闭了实例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());
              }
      
          }
      
      }