2013-07-15 16 views
7

ho migrato a Tomcat 7 [7.0.4.1] in passato un avvio richiede tra 5 o 7 secondi ora richiede 30 secondi che ho letto su altri post metadata-complete = "true" impostato nel web.xml risolve il trucco ma non sembra risolto nel mio caso ho aggiunto metadata-complete="true" in WEB-INF/web.xml e nel tomcat/conf/web.xml non sembra funzionare.Tomcat 7 slow start metadata-complete = "true" web.xml

qui è il codice per tomcat/conf/web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
metadata-complete="true" 
version="3.0"> 

ecco il codice per WEB-INF/web.xml

<web-app metadata-complete="true" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

la Distribuzione è in corso con successo qui è il gatto traccia è la stampa.

INFO: Starting Servlet Engine: Apache Tomcat/7.0.41 
jul 22, 2013 4:33:08 PM org.apache.catalina.core.ApplicationContext log 
INFO: No Spring WebApplicationInitializer types detected on classpath 

in questa frase sta prendendo più di 30 secondi ..

INFO: Starting Servlet Engine: Apache Tomcat/7.0.41 

le mie domande sono:

  • quello che sto facendo male ??

  • come posso vedere è metadata-completo è impostato su true sto leggendo in altri siti web questo può essere fatto controllando la bandiera in isMetadataComplete() ma la mia domanda è dove o come posso chiamare questo metodo ??

stiamo usando [Spring, Hibernate, ZK] nel progetto fuori.

+1

Se non si utilizza servlet 3.0, quindi 'metadati -completo' element non è valido. Non puoi semplicemente impostare la versione su 3.0 se il tuo contenitore non sta eseguendo il servlet 3.0, es. hai il barattolo della servlet 3.0. –

risposta

8

Il completamento dei metadati non ha risolto neanche i miei problemi di avvio. Il problema è che tomcat esegue la scansione di più (quasi tutti i vasi) all'avvio per annotazioni e file tld. Ovviamente, non tutti i jar contengono file tld e annotazioni. Per migliorare i tempi di avvio è possibile escludere questi vasi. Qualcosa come il seguente dovrebbe fare il trucco: Regolare conf/catalina.properties:

org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar 

# Additional JARs (over and above the default JARs listed above) to skip when 
# scanning for TLDs. The list must be a comma separated list of JAR file names. 
# The following list will make sure stuff like jstl and spring-webmvc.jar etc which contain tld files are included 
org.apache.catalina.startup.TldConfig.jarsToSkip=a*.jar,b*.jar,c*.jar,d*.jar,e*.jar,f*.jar,g*.jar,h*.jar,i*.jar,jc*.jar, jd*.jar, je*.jar, jl*.jar, jo*.jar, JO*.jar, jr*.jar, jso*.jar, jsr*.jar, jts*.jar,k*.jar,l*.jar,m*.jar,n*.jar,o*.jar,p*.jar,q*.jar,r*.jar,spring-a*.jar, spring-c*.jar, spring-e*.jar, spring-j*.jar, spring-s*.jar, spring-test*.jar, stax*.jar, st*.jar, t*.jar,u*.jar,v*.jar,w*.jar,x*.jar,y*.jar,z*.jar 
+1

scusami per domanda come posso sapere quali vasi contengono TLD e annotazioni ?? usiamo primavera, ibernazione, ehcache e ZK. – chiperortiz

+0

Dipende dai tag che stai utilizzando. La maggior parte delle persone usa solo tag form jstl e spring. In questi casi, ciò che ho suggerito è sufficiente. Potresti voler vedere i tuoi file JSP per vedere se stai usando altri tag. grazie. –

+0

La scansione per i file TLD non è nuova. È lì dall'inizio. Questo non dovrebbe essere un motivo perché era più veloce nelle versioni precedenti di tomcat. –

1

Per coloro che potrebbero ancora incontrare questo problema come me (durante la migrazione a Java 8 e dalla primavera 3,0-3,2), nota che incontrerai anche il problema se un vaso che usi contiene un web-fragment.xml (come spring-web).

Per evitare questo, si dovrebbe anche specificare un vuoto absolute-ordering nel web.xml (secondo SPRING-10196 e HowTo/FasterStartUp di Tomcat):

<absolute-ordering/> 

(anche assicurarsi che si sta specificando servlet 3.0 nel vostro web.xml)

Inoltre, se si utilizza una versione precedente di Tomcat, uno absolute-ordering vuoto non funziona a causa di bug 54262.Per risolvere questo problema, utilizzare un nome fittizio frammento:

<absolute-ordering> 
    <!-- Due to a bug in Tomcat 7.0.29, an empty absolute-ordering does not prevent the annotation scanning. 
    Adding a dummy fragment name does the trick. 
    see proposed workaround in https://bz.apache.org/bugzilla/show_bug.cgi?id=54262#c0 --> 
    <name>dummy</name> 
</absolute-ordering> 

Se non funziona, prendere in considerazione la soluzione proposta da jarsToSkip @Prashant, ma questo è più fastidioso in quanto richiede di modificare la configurazione di Tomcat in tutti gli ambienti.

(Dal momento che sto usando una vecchia versione di Tomcat su Java 8, l'elaborazione di annotazione è completamente rotto per me, con un sacco di eccezioni che si verificano in fase di avvio)

Problemi correlati