2013-07-15 6 views
7

ich habe zu Tomcat 7 [7.0.4.1] in der Vergangenheit ein StartUp dauert zwischen 5 oder 7 Sekunden dauert jetzt 30 Sekunden habe ich auf anderen Post gelesen metadata-complete = "true" in der web.xml löst den Trick aber scheint nicht gelöst in meinem Fall habe ich metadata-complete="true" in WEB-INF/web.xml hinzugefügt und in tomcat/conf/web.xml scheint keiner zu funktionieren.Tomcat 7 langsamer Start metadata-complete = "true" web.xml

hier ist der Code für 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"> 

hier der Code für 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"> 

ist die Entfaltungs erfolgreich, hier zu sein ist die Spur tomcat druckt.

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 diesem Satz ist mehr als 30 Sekunden dauern ..

INFO: Starting Servlet Engine: Apache Tomcat/7.0.41 

meine Fragen sind:

  • , was ich falsch mache ??

  • Wie kann ich sehen, ist Metadaten-Complete-Einstellung zu True Ich lese in anderen Web-Site Dies kann die Überprüfung der Flagge in isMetadataComplete() gemacht werden, aber meine Frage ist, wo oder wie kann ich diese Methode aufrufen?

wir verwenden [Spring, Hibernate, ZK] in Out-Projekt.

+1

Wenn Sie nicht Servlet 3.0, dann 'Metadaten verwenden "complete" -Element ist nicht gültig. Sie können die Version nicht einfach auf 3.0 setzen, wenn Ihr Container kein Servlet 3.0 ausführt, d. Sie haben das Servlet 3.0 Glas. –

Antwort

8

Die Metadaten-Complete löste meine Probleme mit der Startzeit auch nicht. Das Problem ist, dass Tomcat beim Start mehrere Annotationen und Tld-Dateien (fast alle Jars) scannt. Natürlich enthalten nicht alle Gläser Tld-Dateien und Anmerkungen. Um Ihre Startzeiten zu verbessern, können Sie diese Jars ausschließen. So etwas wie die folgenden sollte es tun: einstellen 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

Entschuldigung durch Frage Wie kann ich wissen, welche Gläser TLD und Anmerkungen enthält? Wir benutzen Frühling, Winterschlaf, Ehcache und ZK. – chiperortiz

+0

Es hängt davon ab, welche Tags Sie verwenden. Die meisten Leute würden nur jstl- und spring-form-Tags verwenden. In solchen Fällen reicht das aus, was ich vorgeschlagen habe. Sie können sich Ihre JSP-Dateien ansehen, um zu sehen, ob Sie andere Tags verwenden. Danke. –

+0

Scannen nach TLD-Dateien ist nicht neu. Es ist seit Beginn da. Das sollte kein Grund sein, weil es in älteren Versionen von Tomcat schneller war. –

1

Für diejenigen, die noch dieses Problem wie ich auftreten können (während auf Java 8 und von Spring 3,0-3,2 Migration), beachten Sie, dass Sie werden auch auf das Problem stoßen, wenn ein Glas, das Sie verwenden, eine web-fragment.xml (wie Feder-Web) enthält.

Um dies zu vermeiden, sollten Sie auch eine leere absolute-ordering in Ihrem web.xml angeben (nach SPRING-10196 und HowTo/FasterStartUp Tomcat):

<absolute-ordering/> 

(auch sicherstellen, dass Sie Servlet 3.0 in Ihre web.xml angeben)

Wenn Sie eine alte Version von Tomcat verwenden, funktioniert auch ein leerer absolute-ordering aufgrund von bug 54262 nicht.Um dies zu beheben, ein Dummy-Fragment Namen verwenden:

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

Wenn nichts funktioniert, sollten Sie die jarsToSkip Lösung von @Prashant vorgeschlagen, aber das ist ärgerlicher, da es die Tomcat-Konfiguration in allen Umgebungen ändern erfordert.

(Da ich eine alte Version von Tomcat auf Java 8 verwenden, wird die Anmerkung Verarbeitung für mich völlig gebrochen, mit vielen Ausnahmen beim Start auftritt)