Springboot ->Springboot 2:在类路径上检测到 2 个 Spring WebApplicationInitializers [英] Springboot -> Springboot 2: 2 Spring WebApplicationInitializers detected on classpath
问题描述
我有一个 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屋!