簡體   English   中英

Spring Boot ServletRegistrationBean和部署到外部Tomcat

[英]Spring Boot ServletRegistrationBean and Deployment to External Tomcat

最近我發現可以使用Spring Boot附帶的ServletRegistrationBean將我自己的servlet bean添加到MVC。 但文檔似乎表明這只適用於嵌入式servlet容器: http//docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html我的簡單問題是:ServletRegistrationBean可以僅用於嵌入式容器,還是在將戰爭部署到外部Tomcat時使用?

ServletRegistrationBean也可以與外部Tomcat一起使用,實際上,當您將Boot應用程序部署到Tomcat(或任何其他Servlet容器)時,Boot正是如何注冊自己的DispatcherServlet

將spring boot war文件部署到weblogic時遇到了類似的問題。 servlet能夠在Servlet 3.x Web容器的支持下注冊。 但是weblogic正在嘗試創建servlet bean的新servlet實例實例。

@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());
}

並且weblogic會拋出這樣的異常:

<Oct 2, 2017 4:08:31 PM SGT> <Error> <HTTP> <BEA-101125> <[ServletContext@344074943[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
>

似乎web請求直接轉到weblogic而不是spring dispatcher servlet。

但是看到可以在tomcat中部署和運行相同的war文件而沒有任何錯誤是很棘手的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM