2013-07-15 1 views
7

이전에 Tomcat 7 [7.0.4.1]로 이전했습니다. 시작 시간은 5 ~ 7 초가 걸리므로 30 초 걸립니다. 초 다른 게시물을 읽었습니다. web.xml에 설정된 metadata-complete = "true"가 트릭을 해결하지만 내 경우에는 해결되지 않은 것 같습니다. metadata-complete="true"WEB-INF/web.xml에 추가하고 tomcat/conf/web.xml을 입력해도 작동하지 않습니다. 여기 Tomcat 7 slow start metadata-complete = "true"web.xml

여기서 배포가 성공적으로 여기되고있는 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"> 

의 코드가 추적 바람둥이 인쇄입니다입니다 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"> 

코드입니다. 이 문장에서

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 

은 30 초 이상 걸립니다 ..
INFO: Starting Servlet Engine: Apache Tomcat/7.0.41 

내 질문

은 다음과 같습니다

  • 내가 잘못 뭐하는 거지?

  • 내가 볼 수있는 방법은 사실로 설정하고 있습니다. 다른 웹 사이트에서 읽는 중입니다. isMetadataComplete()에있는 플래그를 확인하도록 만들 수 있지만 내 질문은 어디에서 어떻게 할 수 있습니까? 우리가 [봄, 최대 절전 모드, ZK] 밖으로 프로젝트을 사용하는

.

+1

당신은 서블릿 3.0을 사용하지 않는 경우 (I 자바 8 톰캣의 이전 버전을 사용하고 있기 때문에, 주석 처리가 완전히 시작할 때 발생하는 예외의 많은 나를 위해 고장), 다음'메타 데이터 -complete' 요소가 유효하지 않습니다. 컨테이너가 서블릿 3.0을 실행하고 있지 않으면 버전을 3.0으로 설정할 수 없습니다. 서블릿 3.0 병이 있습니다. –

답변

8

metadata-complete가 시작 시간 문제를 해결하지 못했습니다. 문제는 tomcat이 시작할 때 여러 개의 (거의 모든 병)을 주석과 tld 파일로 스캔한다는 것입니다. 물론 모든 항아리에는 tld 파일과 주석이 들어있는 것은 아닙니다. 시작 시간을 향상시키기 위해 이러한 병을 제외 할 수 있습니다. 다음과 같은 뭔가 트릭을 수행해야합니다 은 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

죄송합니다. 어떤 jars에 TLD와 주석이 포함되어 있는지 어떻게 알 수 있습니까 ?? 우리는 봄, 최대 절전 모드, ehcache 및 ZK를 사용합니다. – chiperortiz

+0

사용중인 태그에 따라 다릅니다. 대부분의 사람들은 jstl 및 spring 양식 태그 만 사용합니다. 그런 경우에 내가 제안한 것이 충분합니다. JSP 파일을보고 다른 태그를 사용하고 있는지 확인하십시오. 고마워. –

+0

TLD 파일 검색이 새로운 것은 아닙니다. 그것은 처음부터 거기에 있습니다. 그것은 이전 버전의 바람둥이에서 더 빠르기 때문에 이유가되어서는 안됩니다. –

1

를 (3.2 스프링 3.0 자바 8과에서 마이그레이션하는 동안), 메모를 그 당신이 사용하는 항아리가 web-fragment.xml (예 : 스프링 - 웹)을 포함하면 문제가 발생합니다.

이를 방지하기 위해, 당신은 또한에 빈 absolute-ordering를 지정해야합니다 당신의 web.xml (SPRING-10196에 따라 톰캣의 HowTo/FasterStartUp) :

<absolute-ordering/> 

(또한 당신의 web.xml에 서블릿 3.0를 지정하고 있는지 확인)

또한 이전 버전의 Tomcat을 사용하는 경우 으로 인해 absolute-ordering이 비어 있습니다.이 문제를 해결하려면 더미 조각 이름을 사용

아무것도 작동하지 않는 경우
<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> 

, @Prashant에 의해 제안 된 jarsToSkip 솔루션을 고려하지만 모든 환경에서 Tomcat 구성을 수정할 필요로하기 때문에이 더 짜증나이다.