최근 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으로의 배치
1
A
답변
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에 배포하고 실행할 수 있다는 것은 까다로운 내용입니다.