升级Spring Boot 3.2.3时出现simpleAsyncTaskSchedulerBuilder Bean创建错误
SimpleAsyncTaskScheduler类找不到的异常 问题现象
将Spring Boot从3.0.6(Java 17)升级至3.2.3(Java 17)后,启动应用抛出ClassNotFoundException: org.springframework.scheduling.concurrent.SimpleAsyncTaskScheduler,但使用3.2.3创建的新项目可正常运行。
核心原因
Spring Boot 3.2.x对应的Spring Framework版本是6.1.x,而SimpleAsyncTaskScheduler是Spring Framework 6.1新增的类,位于spring-core模块中。你的项目依赖树中存在旧版本的Spring Framework模块(如6.0.x的spring-core、spring-context),导致Spring Boot 3.2.3的自动配置类SimpleAsyncTaskSchedulerBuilder无法找到对应的依赖类。
从错误栈可以看到,当前项目使用的spring-core版本是6.0.11,而Spring Boot 3.2.3要求的是6.1.4,版本不匹配是根本问题。
解决方案
1. 统一Spring Framework版本依赖
确保项目通过Spring Boot的依赖管理来控制所有Spring模块的版本,避免版本不一致:
- Maven项目:确认
pom.xml中正确引入Spring Boot Parent:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <relativePath/> </parent> - Gradle项目:确保使用Spring Boot插件并引入依赖管理:
plugins { id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' }
2. 排查并排除冲突依赖
通过依赖树命令找出引入旧版本Spring模块的第三方依赖,然后排除这些冲突:
- Maven执行:
mvn dependency:tree - Gradle执行:
./gradlew dependencies
查找所有版本低于6.1.x的spring-core、spring-context、spring-scheduling模块,在对应的第三方依赖中添加排除规则。例如Maven中:
<dependency> <groupId>第三方依赖组ID</groupId> <artifactId>第三方依赖 artifactId</artifactId> <version>版本号</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency>
3. 清理缓存并重新构建
清理本地仓库的旧依赖缓存,确保拉取正确版本的依赖:
- Maven:
mvn clean install -U - Gradle:
./gradlew clean build --refresh-dependencies
4. 检查自定义Task配置
如果项目中有自定义的TaskScheduler相关配置,确认是否直接引用了SimpleAsyncTaskScheduler。若有,确保使用的是Spring Framework 6.1.x中的类,避免因包路径或类结构变化导致的问题。
内容的提问来源于stack exchange,提问作者AjayDarshanala

