Springboot ->Springboot 2:在类路径上检测到 2 个 Spring WebApplicationInitializers [英] Springboot -> Springboot 2: 2 Spring WebApplicationInitializers detected on classpath

查看:120
本文介绍了Springboot ->Springboot 2:在类路径上检测到 2 个 Spring WebApplicationInitializers的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've got a web app I recently upgraded from springboot to springboot 2. When I deploy it to Tomcat 8 it seems to start but doesn't start fully.

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

In localhost.2019-09-04.log (Tomcat) I have the following error:

2 Spring WebApplicationInitializers detected on classpath

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

I've tried various things from this post:

在类路径上检测到 2 个 Spring WebApplicationInitializers

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

but has no luck. How can I find out which package another WebApplicationInitializers might be in?

推荐答案

那个日志是从 SpringServletContainerInitializer 输出的,它是处理 WebApplicationInitializer 的 Servlet 3.0 ServletContainerInitializer代码>.

That log is output from SpringServletContainerInitializer which is Servlet 3.0 ServletContainerInitializer that handles WebApplicationInitializer.

所以找出这些WebApplicationInitializer 的最简单方法是创建我们自己的ServletContainerInitializer,它也处理WebApplicationInitializer 并打印它们的信息安慰.

So the most simple way to find out what are these WebApplicationInitializer is to create our own ServletContainerInitializer that also handle WebApplicationInitializer and print their information to console.

@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 文件路径.

I am referring to this for how to print the JAR file path of a class.

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

To register it , create a file META-INF/services/javax.servlet.ServletContainerInitializer. Inside this file , include the fully qualified class name of our ServletContainerInitializer :

org.foo.bar.FooServletContainerInitializer

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

Then it should execute during Tomcat starts.

这篇关于Springboot ->Springboot 2:在类路径上检测到 2 个 Spring WebApplicationInitializers的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆