2013-04-19 19 views
20

Ich versuche, mehrere Instanzen von Tomcat auszuführen, aber auch nach dem Konfigurieren verschiedener Ports zum Abhören und Herunterfahren der zweiten Instanz versucht es weiterhin, auf 8080 zu hören (konfiguriert für 8081). Ich habe gelesen, dass ich einen anderen Wert für CATALINA_BASE setzen muss. Von allen Artikeln, die online sind, zeigt keiner von ihnen wirklich an, in welcher Datei diese Variable eingestellt werden kann.Tomcat mehrere Instanzen gleichzeitig

Wo und wie kann ich CATALINA_BASE für meine Tomcat-Instanz in C:\apache-tomcat-7.0.39

+0

[CATALINA_BASE hier im Detail erklärt] [1] [1]: http://stackoverflow.com/questions/3090398/tomcat-catalina-base-and-catalina- home-variables –

+0

Es sagt nicht, WO und wie die Variablen gesetzt werden. –

+0

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

Antwort

29

Der einfachste Weg, ich zwei Kopien von Tomcat ausgeführt haben beteiligt die folgenden Schritte (Ich habe versucht, zwei verschiedene Versionen von Tomcat zu laufen, 6 und 7):

  • Stellen 2 Kopien von tomcat in verschiedenen Ordnern (Wenn es sich um verschiedene Versionen handelt, ist dies einfach. Wenn sie dieselbe Version haben, müssen Sie auf andere Weise unterschieden werden. Es gibt viele Dateien, die Tomcat erstellt, um zwei Instanzen mit demselben Arbeitsverzeichnis zu verwalten ist nicht möglich)

  • Ändern Sie die folgenden Ports, die Tomcat inabgehört

    • <Connector port="8080"> < - Dies ist der Port, den Tomcat auf HTTP reagieren verwendet, um Anforderungen
    • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> < - dies definiert zwei Ports, einen für den AJP-Konnektor (verwendet, wenn Sie tomcat hinter einem Apache verwenden oder IIS Server) und der für HTTPS-Datenverkehr verwendet Port
    • <Server port="8005" shutdown="SHUTDOWN"> < - das ist der Port, den Tomcat auf SHUTDOWN Ereignisse zu reagieren, verwendet

Wenn Sie dies als Windows-Dienst ausführen, müssen Sie für jede Instanz verschiedene Dienstnamen einrichten (dies ist während der Installation möglich, der Standard für Tomcat 7 ist tomcat7). Sobald Tomcat all seine Konfigurationsfelder verwenden relative Pfade laufen, so dass Sie nicht berühren müssen CATALINA_BASE

+3

Ja, das habe ich zuerst ausprobiert Ich habe 2 Ordner mit 2 verschiedenen Versionen von TomCat, 7.0.37 und 7.0.39. Aber selbst nachdem ich 'server.xml' auf .39 bearbeitet habe, versuche ich weiterhin auf 8080 und den anderen Standard zu hören. –

+0

Wenn Sie den Server-Port und die zwei Connector-Ports ändern, kann ich bestätigen, dass dies funktioniert. Auf dem Computer, auf dem ich tippe, habe ich Tomcat7 an Port 80 und Tomcat6 an Port 8080 abhören. –

+0

Vergiss nicht, dass du den Tomcat-Server neu starten musst, um Änderungen in server.xml zu laden. –

1

Wenn Sie nicht Tomcat für mehrere Instanzen konfiguriert haben, indem ein CATALINA_BASE Verzeichnis einstellen, dann $ CATALINA_BASE wird auf den Wert von $ CATALINA_HOME eingestellt werden, die Verzeichnis, in das Sie Tomcat installiert haben.

+0

"Ich versuche, mehrere Instanzen von Tom Cat" –

+1

http://StackOverflow.com/questions/1794444/use-multiple-catalina-base-to-setup-tomcat-6-Instanzen-on-Windows –

+0

Es ist für Tomcat 6, aber Sie können es immer noch verwenden. –

40

Lassen Sie uns sagen, dass Sie sich nur ein Tomcat Ordner in C: \ Apache-tomcat-7.0.39 und dass Sie zwei Instanzen davon ausführen möchten.

Stellen Sie sicher, dass Sie CATALINA_HOME System/Benutzervariable gesetzt haben, und zeigt auf C: \ Apache-tomcat-7.0.39

  1. einen Ordner C: \ instance1. Kopieren Sie , webapps und Temp Ordner von C: \ Apache-Tomcat-7.0.39 und fügen Sie sie in C: \ instance1. Sie können Inhalte aus Webapps und temporären Ordnern löschen, die sich unter instance1 befinden. Berühren Sie nicht conf Inhalt.

  2. Kopieren Sie jetzt> fügen Sie C: \ instance1 ein und benennen Sie es in instance2 um.Auf diese Weise haben sowohl instance1 als auch instance2 den gleichen Inhalt.

  3. Zum C: \ instance2 \ conf, bearbeiten server.xml und die Anzahl dieser Ports ändern (I, als XXXX markiert):

    <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. Stellen Sie alles, was Sie möchten, in instance1 \ webapps und instance2 \ webapps

    bereit
  5. Erstellen Sie die folgenden 4 Batch-Dateien unter C: \

instance1_startup.bat

@echo off

Satz CATALINA_BASE = C: \ instance1

CD "% CATALINA_HOME% \ bin"

Satz TITLE = My Tomcat Instanz 01

Anruf startup.bat% TITLE%

instance1_shutdown.bat

@echo

set CATALINA_BASE off = C: \ instance1

CD "% CATALINA_HOME% \ bin"

Anruf shutdown.bat

instance2_startup.bat

@echo off

set CATALINA_BASE = C: \ instance2

cd „% CATALINA_HOME% \ bin "

gesetzt TITEL = My Tomcat Instanz 02

Anruf startup.bat% TITLE%

instance2_shutdown.bat

@echo

set CATALINA_BASE off = C: \ instance2

cd "% CATALINA_HOME% \ bin"

Anruf shutdown.bat

  1. Führen Sie instance1_startup.bat und instance2_startup.bat, hoffentlich sollte es funktionieren.
+0

Das sollte der einfachste Weg sein um dies zu tun. Ich weiß nicht, warum ich mir die Mühe machen muss, mehrere Versionen von Tomcat herunterzuladen. Thx, Goran! –

+3

Dies sollte die akzeptierte Antwort sein. – anirban

+0

Dieser gibt konkrete Lösung. – 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

Es wird definitiv funktionieren. –

+0

Willkommen bei Stack Overflow! Während dieses Code-Snippet die Frage lösen kann, einschließlich einer Erklärung [hilft wirklich] (// meta.stackexchange.com/q/114762), um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –