No Spring WebApplicationInitializer types detected on classpath
2023-09-27 14:23:43 时间
情况:
1.使用 Tomcat 8 Maven 插件
2.使用 ServletContainerInitializer 模式配置 Spring
配置好后发现只会加载 spring-web 配置的 WebApplicationInitializer 的子类,自己配置的 WebApplicationInitializer 子类不会加载,传入的 WebApplicationInitializer 类型只有spring 自己的
查询无结果,最后换回 Tomcat 7 Maven 插件,问题解决
Tomcat 8 Maven
<pluginRepositories> <pluginRepository> <id>alfresco-public</id> <url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url> </pluginRepository> </pluginRepositories> <packaging>war</packaging> <build> <plugins> <!-- 指定jdk --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat8-maven-plugin</artifactId> <version>3.0-r1756463</version> <configuration> <port>80</port> <path>/ssm</path> <server>tomcat8</server> <charset>UTF-8</charset> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> </plugins> </build>
Tomcat 7 Maven
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!--<ignorePackaging>true</ignorePackaging>--> <port>80</port> <path>/ssm</path> <server>tomcat7</server> <charset>UTF-8</charset> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin>
尝试自己配置 ServletContainerInitializer,不使用 Spring 配置的 ,发现 Tomcat 8 Maven 也可以正常执行
附上 org.springframework.web.SpringServletContainerInitializer 源码,可以看到 WebApplicationInitializer 类型的集合为空
@HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer { @Override public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException { List<WebApplicationInitializer> initializers = new LinkedList<>(); if (webAppInitializerClasses != null) { for (Class<?> waiClass : webAppInitializerClasses) { if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && WebApplicationInitializer.class.isAssignableFrom(waiClass)) { try { initializers.add((WebApplicationInitializer) ReflectionUtils.accessibleConstructor(waiClass).newInstance()); } catch (Throwable ex) { throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex); } } } } if (initializers.isEmpty()) { servletContext.log("No Spring WebApplicationInitializer types detected on classpath"); return; } servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath"); AnnotationAwareOrderComparator.sort(initializers); for (WebApplicationInitializer initializer : initializers) { initializer.onStartup(servletContext); } } }
相关文章
- Spring Boot 使用 spring.datasource.data 的时候找不到数据文件
- spring applicationContext.xml最全约束
- 在spring 配置文件中引入其他文件
- 精品spring boot+MySQL线上点餐系统vue
- SpringBoot 源码解析 (八)----- Spring Boot 精髓:事务源码解析
- Spring Security(07)——缓存UserDetails
- spring service层单元测试
- Spring框架核心功能手写实现
- FreeMarker 一二事 - 静态模板结合spring展示
- Spring Validation 表单校验
- Spring Cache 总结