Springboot -> Springboot 2: 2 Spring 在类路径上检测到 WebApplicationInitializers
Springboot -> Springboot 2: 2 Spring WebApplicationInitializers detected on classpath
我有一个 Web 应用程序,我最近从 springboot 升级到 springboot 2。当我将它部署到 Tomcat8 时,它似乎启动但没有完全启动。
在 localhost.2019-09-04.log (Tomcat) 我有以下错误:
2 Spring WebApplicationInitializers detected on classpath
我已经尝试了很多post:
2 Spring WebApplicationInitializers detected on classpath
但运气不好。我如何找出另一个 WebApplicationInitializers 可能在哪个包中?
该日志是从 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("----------------");
}
}
}
关于如何打印 class 的 JAR 文件路径,我指的是 this。
要注册它,请创建一个文件 META-INF/services/javax.servlet.ServletContainerInitializer
。在此文件中,包含我们 ServletContainerInitializer
的完全限定 class 名称:
org.foo.bar.FooServletContainerInitializer
然后它应该在 Tomcat 启动期间执行。
我有一个 Web 应用程序,我最近从 springboot 升级到 springboot 2。当我将它部署到 Tomcat8 时,它似乎启动但没有完全启动。
在 localhost.2019-09-04.log (Tomcat) 我有以下错误:
2 Spring WebApplicationInitializers detected on classpath
我已经尝试了很多post:
2 Spring WebApplicationInitializers detected on classpath
但运气不好。我如何找出另一个 WebApplicationInitializers 可能在哪个包中?
该日志是从 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("----------------");
}
}
}
关于如何打印 class 的 JAR 文件路径,我指的是 this。
要注册它,请创建一个文件 META-INF/services/javax.servlet.ServletContainerInitializer
。在此文件中,包含我们 ServletContainerInitializer
的完全限定 class 名称:
org.foo.bar.FooServletContainerInitializer
然后它应该在 Tomcat 启动期间执行。