Tomcat несколько экземпляров одновременно

Я пытаюсь запустить несколько экземпляров Tomcat, но даже после настройки разных портов для прослушивания и выключения второго экземпляра он продолжает пытаться слушать 8080 (настроенный для 8081). Я читал, что я должен установить другое значение для CATALINA_BASE. Из всех статей, которые есть в интернете, ни одна из них фактически не показывает, в каком файле эта переменная может быть установлена.

где и как я могу установить CATALINA_BASE для моего экземпляра Tomcat в C:apache-tomcat-7.0.39

5 ответов


самый простой способ запустить две копии Tomcat включал следующие шаги (я пытался запустить две разные версии tomcat, 6 и 7):

  • установите 2 копии tomcat в разных папках (если они разные версии, то это легко, если они одна и та же версия, то вам нужно будет различать каким-то другим способом. Есть много файлов, которые Tomcat создает для управления им, поэтому запуск двух экземпляров с одним и тем же рабочим каталогом, вероятно, не возможно)

  • измените следующие порты, которые прослушивает tomcat в server.xml

    • <Connector port="8080">
    • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    • <Server port="8005" shutdown="SHUTDOWN">

наконец, если вы используете это как службу Windows, вам нужно будет установить разные имена служб для каждого экземпляра (вы можете сделать это во время установки, по умолчанию для Tomcat 7-tomcat7). После запуска Tomcat все его поля конфигурации используют относительные пути, поэтому вам не нужно касаться CATALINA_BASE


предположим, что у вас есть только одна папка Tomcat, расположенная в C:\apache-tomcat-7.0.39 и что вы хотите запустить два экземпляра из него.

убедитесь, что у вас есть CATALINA_HOME набор системных / пользовательских переменных и указание на C:\apache-tomcat-7.0.39

  1. создать папку C:\instance1 - ... Копия conf, webapps и temp папки из C:\apache-tomcat-7.0.39 и вставить их C:\instance1. Вы можете удалить содержимое из webapps и временных папок, расположенных в instance1, но не трогайте conf содержание.

  2. Теперь копировать > вставить C:\instance1 и переименуйте его в instance2. Так, оба!--4-->instance1 и instance2 будет иметь тот же контент.

  3. перейти к C:\instance2\conf, edit сервер.в 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. разверните все, что вы хотите в instance1\webapps и instance2\webapps

  5. создайте следующие 4 пакетных файла под C:\

instance1_startup.летучая мышь!--5-->

@echo off

установить CATALINA_BASE=C:\instance1

cd "%CATALINA_HOME%\bin"

установить заголовок=мой экземпляр Tomcat 01

запуск звонка.bat %TITLE%

instance1_shutdown.летучая мышь!--5-->

@echo off

установить CATALINA_BASE=C:\instance1

cd "%CATALINA_HOME%\bin"

завершение вызова.летучая мышь!--6-->

instance2_startup.летучая мышь!--5-->

@echo off

установить CATALINA_BASE=C:\instance2

cd "%CATALINA_HOME%\bin"

установить заголовок=мой экземпляр Tomcat 02

запуск звонка.bat %TITLE%

instance2_shutdown.летучая мышь!--5-->

@echo off

установить CATALINA_BASE=C:\instance2

cd "%CATALINA_HOME%\bin"

завершение вызова.летучая мышь!--6-->

  1. выполнить instance1_startup.летучая мышь!--5--> и instance2_startup.летучая мышь!--5-->, надеюсь, это сработает.

Если вы не настроили Tomcat для нескольких экземпляров, установив каталог CATALINA_BASE, то $CATALINA_BASE будет установлено значение $CATALINA_HOME, каталог, в который вы установили Tomcat.


самый простой способ-загрузить другой tomcat 8 или 9 и установить его при установке изменить все номера портов. Копирования существующего экземпляра и изменение номера порта вряд ли в сервере.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());
        }

    }

}