2013-07-15 12 views
7

Po migracji do Tomcat 7 [7.0.4.1] w przeszłości startUp trwa od 5 do 7 sekund, teraz zajmuje 30 sekund przeczytałem w innym poście metadata-complete = "true" ustawiony w web.xml rozwiązuje problem, ale wydaje się nie być rozwiązany w moim przypadku dodałem metadata-complete="true" w WEB-INF/web.xml, aw tomcat/conf/web.xml oba wydają się działać.Tomcat 7 slow start metadata-complete = "true" web.xml

Oto kod dla 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"> 

Oto kod dla 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"> 

Wdrażanie jest bycie powodzeniem Oto kocur ślad drukuje.

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 

w tym zdaniu jest podejmowanie ponad 30 sekund ..

INFO: Starting Servlet Engine: Apache Tomcat/7.0.41 

moje pytania są następujące:

  • co robię źle ??

  • jak widzę jest metadata-complete jest ustawienie true czytam w inni stronie internetowej może być wykonane sprawdzenie flagi w isMetadataComplete() ale moje pytanie brzmi: gdzie i jak mogę nazwać ten sposób ??

używamy [Wiosna, hibernacja, ZK] OUT projektu.

+1

Jeśli nie używasz aplet 3.0, następnie 'metadanych Element "complete" jest nieprawidłowy. Nie możesz po prostu ustawić wersji na 3.0, jeśli twój kontener nie obsługuje serwletu 3.0, czyli. masz słoik 3.0 serwletu. –

Odpowiedz

8

Użycie metadanych nie rozwiązało również problemów związanych z czasem uruchamiania. Problem polega na tym, że tomcat skanuje wiele (prawie wszystkie słoiki) przy uruchamianiu dla adnotacji i plików tld. Oczywiście nie wszystkie słoiki zawierają pliki tld i adnotacje. Aby poprawić czas uruchamiania, możesz wykluczyć te słoiki. Coś jak poniżej powinno załatwić sprawę: Adjust 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

przepraszam za pytanie, skąd mogę wiedzieć, które słoiki zawierają TLD i adnotacje? używamy sprężyny, hibernacji, ehcache i ZK. – chiperortiz

+0

To zależy od używanych tagów. Większość ludzi używałaby tylko znaczników jstl i spring formula. W takich przypadkach wystarczy to, co zasugerowałem. Możesz zajrzeć do plików JSP, aby sprawdzić, czy używasz innych tagów. dzięki. –

+0

Skanowanie plików TLD nie jest nowe. Jest tam od początku. To nie powinno być powodem, ponieważ było szybsze w starszych wersjach tomcat. –

1

dla tych, którzy mogą jeszcze napotkać ten problem jak ja (podczas migracji do Javy 8 i od wiosny 3,0 do 3,2), należy zauważyć, że pojawi się również problem, jeśli którykolwiek z używanych słoików zawiera web-fragment.xml (jak wiosenna wstęga).

Aby tego uniknąć, należy również określić pusty absolute-ordering w twojej web.xml (według SPRING-10196 i Tomcat HowTo/FasterStartUp):

<absolute-ordering/> 

(również upewnić się, że określenie aplet 3.0 w web.xml)

Ponadto, jeśli używasz starej wersji Tomcat, pusty absolute-ordering nie będzie działać z powodu bug 54262.Aby rozwiązać ten problem, należy użyć obojętne Fragment nazwy:

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

Jeśli nic nie działa, należy rozważyć jarsToSkip rozwiązanie zaproponowane przez @Prashant, ale jest to bardziej uciążliwe, ponieważ wymaga modyfikowania konfiguracji Tomcat we wszystkich środowiskach.

(Ponieważ używam starej wersji Tomcat na Java 8, przetwarzanie adnotacja jest całkowicie złamany dla mnie, z dużą ilością wyjątków występujących podczas uruchamiania)

Powiązane problemy