【问题标题】:Springboot -> Springboot 2: 2 Spring WebApplicationInitializers detected on classpathSpring Boot -> Spring Boot 2:在类路径上检测到 2 个 Spring WebApplicationInitializers
【发布时间】:2020-01-07 12:50:20
【问题描述】:

我最近从 springboot 升级到 springboot 2 有一个 web 应用程序。当我将它部署到 Tomcat 8 时,它似乎可以启动但没有完全启动。

在 localhost.2019-09-04.log (Tomcat) 中出现以下错误:

2 Spring WebApplicationInitializers detected on classpath

我在这篇文章中尝试了各种方法:

2 Spring WebApplicationInitializers detected on classpath

但没有运气。如何找出另一个 WebApplicationInitializers 可能在哪个包中?

【问题讨论】:

  • 你碰巧有 XML 和 Java 配置的组合吗?
  • 不,没有 XML 配置。

标签: java spring-boot tomcat8


【解决方案1】:

该日志是从 SpringServletContainerInitializer 输出的,它是处理 WebApplicationInitializer 的 Servlet 3.0 ServletContainerInitializer

因此,找出这些WebApplicationInitializer 是什么的最简单方法是创建我们自己的ServletContainerInitializer,它也处理WebApplicationInitializer,并将它们的信息打印到控制台。

@HandlesTypes(WebApplicationInitializer.class)
public class FooServletContainerInitializer implements ServletContainerInitializer {

    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        for (Class<?> clazz : c) {
            System.out.println(clazz);
            System.out.println(clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class"));
            System.out.println("----------------");
        }

    }
}

我指的是this 以了解如何打印类的 JAR 文件路径。

要注册它,请创建一个文件META-INF/services/javax.servlet.ServletContainerInitializer。在这个文件中,包含我们ServletContainerInitializer 的完全限定类名:

org.foo.bar.FooServletContainerInitializer

然后它应该在 Tomcat 启动期间执行。

【讨论】:

  • 好像没有加载。如果WAR打包正确,部署到Tomcat后,可以发现javax.servlet.ServletContainerInitializer文件被炸成$TomcatHomeDir/webapps/your-app-name/WEB-INF/classes/META-INF/services路径?
  • 我想我们找到了另一种方式:org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer@39cfe31b 类名:org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer 09-Sep -2019 14:29:30.331 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 初始化程序详细信息:ToString:uk.org.wlma.drs.DrsServletInitializer@6bb5804b 类名:uk.org.wlma .drs.DrsServletInitializer
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 2019-02-18
  • 2020-11-02
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
相关资源
最近更新 更多