从日志分析,问题主要集中在Spring框架初始化失败,导致`ServletContextListener`无法正常启动。以下是详细分析和可能的解决方案:
---
### **问题核心**
1. **异常链路**:
- 最外层异常:`java.lang.ExceptionInInitializerError`
- 导致原因:`WebApplicationContextInitListener.contextInitialized` 方法中抛出异常。
- 根因:`spring init fail!`
- 具体问题:`BeanDefinitionParsingException`,表示在解析Spring配置文件时出现问题。
- 根本原因:`java.lang.NoSuchMethodError`
- 具体方法:`org.springframework.beans.MutablePropertyValues.add(Ljava/lang/String;Ljava/lang/Object;)Lorg/springframework/beans/MutablePropertyValues;`
2. **关键信息**:
- Spring配置文件路径:`classpath*:/com/ebao/pub/applicationContext*.xml`
- 导入失败的XML文件:`applicationContext-ls-aop-ui.xml`
- 异常方法:`MutablePropertyValues.add(String, Object)` 方法未找到。
3. **根本原因推测**:
- `NoSuchMethodError` 通常是由类版本不匹配引起的。具体来说:
- 当前代码依赖了某个Spring版本中的`MutablePropertyValues.add`方法。
- 但运行环境中加载的Spring库版本不包含该方法(可能是较旧版本)。
---
### **解决方案**
#### **1. 检查Spring版本冲突**
- **原因**:项目中可能存在多个Spring版本的JAR包,导致类加载混乱。
- **解决方法**:
- 使用工具(如`dependency:tree` 或 IDE 的依赖管理功能)检查项目中所有Spring相关依赖的版本。
- 确保所有Spring依赖版本一致。例如:
```xml
org.springframework
spring-context
5.3.22
org.springframework
spring-beans
5.3.22
```
#### **2. 检查Classpath中的重复JAR**
- **原因**:运行环境中可能存在旧版本的Spring JAR包。
- **解决方法**:
- 检查Web应用的`WEB-INF/lib`目录以及WebLogic服务器的共享库目录,确保没有重复或旧版本的Spring JAR包。
- 如果使用Maven构建,可以清理本地仓库缓存:
```bash
mvn dependency:purge-local-repository
```
#### **3. 更新Spring版本**
- **原因**:`MutablePropertyValues.add(String, Object)` 方法是在Spring 4.x或更高版本中引入的。如果运行环境中的Spring版本低于此要求,则会报错。
- **解决方法**:
- 升级Spring版本到支持该方法的最低版本(如5.x)。
- 确保所有依赖的Spring模块版本一致。
#### **4. 验证XML配置文件**
- **原因**:`applicationContext-ls-aop-ui.xml` 文件可能引用了不兼容的Spring命名空间或配置。
- **解决方法**:
- 检查该文件是否正确声明了Spring命名空间,例如:
```xml
```
- 确保使用的Spring Schema版本与实际依赖版本匹配。
#### **5. 调试日志**
- **原因**:需要更详细的日志信息来定位问题。
- **解决方法**:
- 在`weblogic.xml`或`log4j.properties`中增加Spring初始化的日志级别:
```properties
log4j.logger.org.springframework=DEBUG
```
- 查看完整的堆栈信息,确认是否有其他隐藏问题。
---
### **总结**
该问题的根本原因是Spring版本不一致或类加载冲突。建议按照以下步骤逐步排查:
1. 检查并统一Spring依赖版本。
2. 清理运行环境中的重复或旧版本Spring JAR包。
3. 验证XML配置文件的正确性。
4. 增加日志级别以获取更多调试信息。
通过以上步骤,应能有效解决该问题。