2016-08-22 10 views
1

최근 Spring Boot와 함께 제공되는 ServletRegistrationBean을 사용하여 MVC에 내 서블릿 빈을 추가 할 수있는 가능성을 발견했습니다. 그러나 설명서는 이것이 임베디드 서블릿 컨테이너를위한 것임을 제안하는 것 같습니다 : http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html 간단한 질문 : ServletRegistrationBean은 임베디드 컨테이너에서만 사용하거나 전쟁을 외부 Tomcat에 배포 할 수 있습니까?Spring Boot ServletRegistrationBean과 외부 Tomcat으로의 배치

답변

2

ServletRegistrationBean도 Tomcat (또는 다른 서블릿 컨테이너)에 Boot app를 배포 할 때 Boot가 자체 DispatcherServlet을 등록하는 방법과 정확히 일치합니다.

0

스프링 부트 war 파일을 weblogic에 배포 할 때 비슷한 문제가있었습니다. 서블릿은 Servlet 3.x 웹 컨테이너의 지원으로 등록 할 수 있습니다. weblogic은 서블릿 빈의 새 서블릿 인스턴스를 만들려고합니다.

@Bean 
@ConditionalOnMissingBean 
public GraphQLServlet graphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrategyProvider executionStrategyProvider) { 
    return new SimpleGraphQLServlet(schemaProvider, executionStrategyProvider, objectMapperConfigurer, listeners, instrumentation, errorHandler, contextBuilder, graphQLRootObjectBuilder); 
} 

@Bean 
ServletRegistrationBean graphQLServletRegistrationBean(GraphQLServlet servlet) { 
    return new ServletRegistrationBean(servlet, graphQLServletProperties.getServletMapping()); 
} 

와 웹 로직이 같은 예외를 던졌습니다 :

<Oct 2, 2017 4:08:31 PM SGT> <Error> <HTTP> <BEA-101125> <[[email protected][app:cpapps-gra3.1]] Error occurred while instantiating servlet: "simpleGraphQLServlet". 
java.lang.InstantiationException: graphql.servlet.SimpleGraphQLServlet 
     at java.lang.Class.newInstance(Class.java:427) 
     at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo 
     at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo 
     at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon 
     at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.newServletInstanceIfNece 
     Truncated. see log file for complete stacktrace 
Caused By: java.lang.NoSuchMethodException: graphql.servlet.SimpleGraphQLServlet.<init>() 
     at java.lang.Class.getConstructor0(Class.java:3082) 
     at java.lang.Class.newInstance(Class.java:412) 
     at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo 
     at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo 
     at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon 
     Truncated. see log file for complete stacktrace 
> 

은 웹 요청이 직접 웹 로직보다는 봄 디스패처 서블릿에 갈 것 같다.

하지만 동일한 war 파일을 아무런 오류없이 tomcat에 배포하고 실행할 수 있다는 것은 까다로운 내용입니다.