SpringBoot升级3.1.11后PropertyPlaceholderAutoConfiguration错误解决
问题解决方案
核心原因
SpringBoot 3.x 已全面从 javax.* 迁移到 jakarta.* 命名空间,你的代码或依赖中仍在引用旧的 javax.servlet.Servlet 类,导致类加载失败,进而影响FF4JConfiguration类解析与自动配置的条件处理。
具体修复步骤
1. 替换代码中的javax.servlet引用
检查所有代码(包括SecurityConfig、FF4JConfiguration),将所有import javax.servlet.*替换为import jakarta.servlet.*:
// 旧代码 import javax.servlet.Filter; import javax.servlet.http.HttpServletRequest; // 替换后 import jakarta.servlet.Filter; import jakarta.servlet.http.HttpServletRequest;
2. 更新适配Jakarta的依赖版本
- FF4J依赖升级:使用支持SpringBoot 3.x的FF4J版本(至少3.0+),修改
build.gradle中的FF4J依赖:implementation 'org.ff4j:ff4j-web:3.12.0' implementation 'org.ff4j:ff4j-spring-boot-starter:3.12.0' - 移除旧Servlet依赖:删除任何显式引入的
javax.servlet-api依赖,spring-boot-starter-web已内置适配Jakarta的Servlet API。
3. 修正Gradle配置
确保build.gradle中的Java版本、SpringBoot插件版本配置正确:
plugins { id 'java' id 'org.springframework.boot' version '3.1.11' id 'io.spring.dependency-management' version '1.1.5' } java { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-security' // 其他依赖需确保适配SpringBoot 3.x与Jakarta标准 }
4. 彻底清理重建
执行Gradle命令清理旧依赖与构建缓存:
./gradlew clean build --refresh-dependencies
同时在IntelliJ中执行File -> Invalidate Caches... -> Invalidate and Restart,确保IDE缓存完全更新。
5. 临时方案:排除冲突自动配置(仅当依赖无法升级时)
若部分旧依赖无法适配,可在启动类中排除相关自动配置类(优先推荐升级依赖):
@SpringBootApplication(exclude = {PropertyPlaceholderAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
内容的提问来源于stack exchange,提问作者Jansen Miotto
相关产品推荐
相关产品推荐

