2013-04-19 63 views
20

Sto tentando di eseguire più istanze di Tomcat, ma anche dopo aver configurato porte diverse per l'ascolto e l'arresto della seconda istanza, continua a provare ad ascoltare su 8080 (configurato per 8081). Ho letto che devo impostare un valore diverso per CATALINA_BASE. Da tutti gli articoli presenti online, nessuno di questi mostra effettivamente in quale file è possibile impostare questa variabile.Tomcat multiple istanze contemporaneamente

Dove e come posso impostare CATALINA_BASE per la mia istanza di Tomcat in C:\apache-tomcat-7.0.39

+0

[CATALINA_BASE spiegato in dettaglio] [1] [1]: http://stackoverflow.com/questions/3090398/tomcat-catalina-base-and-catalina- home-variabili –

+0

In realtà non dice WHERE e HOW per impostare le variabili. –

+0

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

risposta

29

Il modo più semplice Ho eseguito due copie di Tomcat coinvolti i seguenti passaggi (stavo cercando di eseguire due versioni distinte di Tomcat, 6 e 7):

  • individuare in 2 copie di Tomcat in cartelle diverse (se sono versioni diverse, questo è facile, se sono la stessa versione, sarà necessario distinguerle in un altro modo: ci sono molti file creati da Tomcat per gestirli, quindi è probabile che siano in esecuzione due istanze con la stessa directory di lavoro non è possibile)

  • Modificare le seguenti porte che Tomcat sta ascoltando in server.xml

    • <Connector port="8080"> < - Questa è la porta utilizzata da Tomcat per rispondere alle richieste HTTP
    • <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> < - questo definisce due porte, una per il connettore AJP (usato se si utilizza Tomcat dietro un Apache o IIS server) e la porta utilizzata per il traffico HTTPS
    • <Server port="8005" shutdown="SHUTDOWN"> < - questa è la porta utilizzata da Tomcat per rispondere a eventi di arresto

Infine, se si esegue questo come servizio di Windows, sarà necessario stabilire nomi di servizi diversi per ciascuna istanza (è possibile farlo durante l'installazione, l'impostazione predefinita per Tomcat 7 è tomcat7). Una volta che Tomcat è in esecuzione tutto si tratta di campi di configurazione utilizzano percorsi relativi in ​​modo non c'è bisogno di toccare CATALINA_BASE

+3

Sì, questo è quello che ho provato in primo luogo ho 2 cartelle con 2 diverse versioni di TomCat, 7.0.37 e 7.0.39. Ma anche dopo aver modificato 'server.xml' su .39 continua a cercare di ascoltare su 8080 e gli altri di default. –

+0

Se si modifica la porta del server e le due porte del connettore, posso confermare che ciò funzionerà. Uno sul computer che sto digitando Ho tomcat7 in ascolto sulla porta 80 e tomcat6 sulla porta 8080. –

+0

Non dimenticare che è necessario riavviare Tomcat-Server per caricare le modifiche apportate in server.xml –

1

Se non si è configurato Tomcat per istanze multiple impostando una directory CATALINA_BASE, allora $ CATALINA_BASE sarà impostato al valore di $ CATALINA_HOME, il directory in cui è installato Tomcat.

+0

"Sto tentando di eseguire più istanze di Tom Cat" –

+1

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

+0

È per tomcat 6, ma è ancora possibile utilizzarlo. –

40

Diciamo che si dispone di una sola cartella di Tomcat si trova nella C: \ apache-tomcat-7.0.39, e che desideri eseguire due istanze da esso.

Assicurarsi di aver impostato variabile CATALINA_HOME sistema/utente, e che punta a C: \ apache-tomcat-7.0.39

  1. Creare una cartella C: \ instance1. Copia conf., webapps e temp cartelle da C: \ apache-tomcat-7.0.39 e incollarle in C: \ istanza1. È possibile eliminare i contenuti da app web e cartelle temporanee situate sotto instance1, ma non toccare i contenuti di conf.

  2. Ora copia> incolla C: \ istanza1 e rinominalo in istanza2.In questo modo, sia l'istanza istanza1 e l'istanza avranno lo stesso contenuto.

  3. Vai a C: \ instance2 \ conf, modificare server.xml e modificare i numeri di queste porte (I contrassegnata quelli come 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. Distribuire tutto ciò che si desidera in instance1 \ webapps e instance2 \ webapps

  5. Creare i seguenti 4 file batch in C: \

instance1_startup.bat

@echo off

set CATALINA_BASE = C: \ instance1

cd "% CATALINA_HOME% \ bin"

set TITLE = Il mio Tomcat grado 01

chiamata startup.bat% TITOLO%

instance1_shutdown.bat

@echo off

set CATALINA_BASE = C: \ instance1

cd "% CATALINA_HOME% \ bin"

chiamata shutdown.bat

instance2_startup.bat

@echo off

set CATALINA_BASE = C: \ instance2

cd "% CATALINA_HOME% \ bin "

TITOLO set = Il mio Tomcat grado 02

chiamata startup.bat% TITOLO%

instance2_shutdown.bat

@echo off

set CATALINA_BASE = C: \ instance2

cd "% CATALINA_HOME% \ bin"

chiamata shutdown.bat

  1. Esegui instance1_startup.bat e instance2_startup.bat, si spera che dovrebbe funzionare.
+0

Questo dovrebbe essere il modo più semplice per fare questo. Non so perché ho bisogno di preoccuparmi di scaricare più versioni di Tomcat. Thx, Goran! –

+3

Questa dovrebbe essere la risposta accettata. – anirban

+0

Questo dà una risoluzione concreta. – 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

Funzionerà sicuramente. –

+0

Benvenuto in Stack Overflow! Sebbene questo snippet di codice possa risolvere la domanda, inclusa una spiegazione [aiuta davvero] (// meta.stackexchange.com/q/114762) per migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo la persona che chiede ora! Si prega di [modificare] la risposta per aggiungere una spiegazione e fornire un'indicazione di quali limitazioni e ipotesi si applicano. –