2013-04-19 4 views
20

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

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

+0

[CATALINA_BASE здесь подробно разъяснен] [1] [1]: http://stackoverflow.com/questions/3090398/tomcat-catalina-base-and-catalina- home-variables –

+0

На самом деле это не говорит WHERE и HOW, чтобы установить переменные. –

+0

http://stackoverflow.com/questions/1794444/use-multiple-catalina-base-to-setup-tomcat-6-instances-on-windows –

ответ

29

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

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

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

    • <Connector port="8080"> < - это порт, который использует Tomcat для ответа на HTTP запросов
    • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> < - это определяет два порта, один для разъема AJP (используется, если вы используете кот позади Apache или IIS сервер) и порт, используемый для HTTPS-трафика
    • <Server port="8005" shutdown="SHUTDOWN"> < - это порт, который использует Tomcat реагировать на SHUTDOWN событий

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

+3

Да, это то, что я сначала попробовал. У меня есть 2 папки с двумя разными версиями TomCat, 7.0.37 и 7.0.39. Но даже после того, как я отредактировал 'server.xml' на .39, он продолжает пытаться прослушивать 8080 и другие по умолчанию. –

+0

Если вы измените порт сервера и два порта разъема, я могу подтвердить, что это сработает. Один компьютер, который я набираю, у меня есть tomcat7, прослушивающий порт 80 и tomcat6 на порту 8080. –

+0

Не забывайте, что вам необходимо перезапустить Tomcat-Server для загрузки изменений, сделанных в server.xml –

1

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

+0

«Я пытаюсь запустить несколько экземпляров Tom Cat» –

+1

http://stackoverflow.com/questions/1794444/use-multiple-catalina-base-to-setup-tomcat-6-instance-on-windows –

+0

Его для tomcat 6, но вы все еще можете его использовать. –

40

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

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

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

  2. Теперь скопируйте> вставить C: \ instance1 и переименуйте его в instance2.Таким образом, оба instance1 и instance2 будет иметь одинаковую информацию.

  3. Перейти к C: \ instance2 \ конф, редактировать 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" />

  4. Разверните все, что хотите, в экземпляр1 \ webapps и экземпляр2 \ webapps

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

instance1_startup.bat

@ECHO от

множество CATALINA_BASE = C: \ instance1

cd "% CATALINA_HOME% \ bin"

набор TITLE = My Tomcat Instance 01

вызов startup.bat% TITLE%

instance1_shutdown.bat

@echo от

множество CATALINA_BASE = C: \ instance1

cd "% CATALINA_HOME% \ bin"

вызов shutdown.bat

instance2_startup.bat

@echo от

множество CATALINA_BASE = C: \ instance2

кд «% CATALINA_HOME% \ Bin "

установлен TITLE = Мой Tomcat Instance 02

вызов startup.bat% TITLE%

instance2_shutdown.летучая

@echo от

множество CATALINA_BASE = C: \ instance2

кд "% CATALINA_HOME% \ Bin"

вызов shutdown.bat

  1. Запустить instance1_startup.bat и instance2_startup.bat, надеюсь, он должен работать.
+0

Это должно быть самым простым способом сделать это. Я не знаю, зачем мне нужно загружать несколько версий tomcat. Thx, Горан! –

+3

Это должен быть принятый ответ. – anirban

+0

Это дает конкретное разрешение. – fruqi

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

    } 

} 
+0

Это определенно будет работать. –

+0

Добро пожаловать в переполнение стека! Хотя этот фрагмент кода может решить вопрос, включая объяснение [действительно помогает] (// meta.stackexchange.com/q/114762), чтобы улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –