Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Самый простой способ, которым я запускал две копии 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 (используется, если вы используете tomcat за сервером Apache или IIS) и порт, используемый для трафика HTTPS
    • <Server port="8005" shutdown="SHUTDOWN"> < - это порт, который Tomcat использует для ответа на события SHUTDOWN

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

Ответ 2

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

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

  • Создайте папку C:\instance1. Скопируйте папки conf, webapps и temp из C:\apache-tomcat-7.0.39 и вставьте их в C:\instance1. Вы можете удалить содержимое из webapps и временных папок, расположенных под экземпляром instance1, но не касайтесь содержимого 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

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

instance1_startup.bat

@echo off

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

cd "% CATALINA_HOME%\bin"

set title= My Tomcat Instance 01

call 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"

set title= My Tomcat Instance 02

call startup.bat% TITLE%

instance2_shutdown.bat

@echo off

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

cd "% CATALINA_HOME%\bin"

вызов shutdown.bat

  • Запустите instance1_startup.bat и экземпляр2_startup.bat, надеюсь, он должен работать.

Ответ 3

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

Ответ 4

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());
        }

    }

}