Weblogic 12c部署Spring应用遇DefaultFlashMapManager类找不到异常求助
ClassNotFoundException: DefaultFlashMapManager问题 这个异常的核心原因是Weblogic的类加载机制优先加载了自带的旧版本Spring类,或者你的应用缺少Spring MVC核心依赖,结合你的配置和环境差异,我整理了以下针对性的解决方案:
1. 确保Spring Web MVC依赖完整且版本统一
DefaultFlashMapManager是Spring MVC模块(spring-webmvc)中的核心类,你需要确认:
- 项目依赖中明确引入了
spring-webmvc:5.1.0.RELEASE,且版本和Spring其他组件(如spring-context、spring-web)完全一致。 - 打包时该JAR被包含在WAR包的
WEB-INF/lib目录下(检查Maven/Gradle的依赖scope为compile,而非provided,否则打包时会遗漏)。
2. 修正weblogic.xml的类加载优先级配置
你的配置里存在重复的org.springframework包声明,这可能导致Weblogic解析时出现异常,优化后的配置如下:
<wls:prefer-application-packages> <wls:package-name>org.springframework.*</wls:package-name> <wls:package-name>org.jboss.logging.*</wls:package-name> <wls:package-name>com.fasterxml.*</wls:package-name> <wls:package-name>com.sun.xml.ws.api.wsdl.parser.*</wls:package-name> </wls:prefer-application-packages> <!-- 可选:添加资源优先级配置,加强应用资源的加载权重 --> <wls:prefer-application-resources> <wls:resource-name>org.springframework.*</wls:resource-name> </wls:prefer-application-resources>
通配符*可以更全面地覆盖Spring的所有子包,确保Weblogic优先加载你应用自带的Spring 5.1.0类,而非服务器自带的旧版本。
3. 同步Spring MVC Schema版本与Spring版本
你的applicationContext.xml中使用了spring-mvc-4.3.xsd,但Spring版本是5.1.0,Schema版本不匹配可能导致配置解析时的类路径异常,修正为对应版本的Schema:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-5.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-5.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-5.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-5.1.xsd"> <!-- 原有配置内容保持不变 --> </beans>
确保所有Spring相关的Schema版本都与5.1.0对应,避免配置解析时的兼容性问题。
4. 验证WAR包的完整性
打包后解压WAR包,检查WEB-INF/lib目录下是否存在:
spring-webmvc-5.1.0.RELEASE.jar- 所有其他Spring 5.1.0版本的核心JAR(如spring-context、spring-web、spring-core等)
如果缺少任何一个,排查打包工具的配置,确保依赖被正确引入。
为什么开发环境Tomcat正常?
Tomcat本身不自带Spring类库,所有依赖都从应用的WEB-INF/lib加载,不会出现类加载冲突;而Weblogic通常内置了旧版本的Spring组件,当你的应用没有明确指定类加载优先级时,Weblogic会优先加载自带的旧版本,导致找不到Spring 5.1.0新增或变更的类(比如DefaultFlashMapManager的路径或实现可能在旧版本中不存在)。
内容的提问来源于stack exchange,提问作者Hosam

