Micronaut升级至4.0.0后启动失败:缺少DataSourceResolver Bean
Micronaut 4.0升级后「No bean of type [io.micronaut.jdbc.DataSourceResolver] exists」问题解决
问题根源
Micronaut 4.0对SQL模块做了架构重构,io.micronaut.jdbc.DataSourceResolver类已从原micronaut-jdbc模块迁移至micronaut-sql-core模块。此外,报错中出现的RepairingDataSourceMigrationRunner表明应用依赖数据库迁移组件(如Flyway/Liquibase),这类组件的Micronaut集成包也需要同步升级到适配4.0的版本,否则会触发依赖注入失败。
修复方案
1. 调整Gradle依赖
替换原有JDBC相关依赖,添加micronaut-sql-core,并确保所有SQL依赖版本统一为4.0.0:
// 移除原有的micronaut-jdbc依赖,用sql-core替代 implementation("io.micronaut.sql:micronaut-sql-core:4.0.0") implementation("io.micronaut.sql:micronaut-jdbc-hikari:4.0.0") // 若使用数据库迁移(如Flyway),需升级对应集成包到适配Micronaut 4的版本 // implementation("io.micronaut.flyway:micronaut-flyway:5.0.0") // 若使用Liquibase则对应替换为: // implementation("io.micronaut.liquibase:micronaut-liquibase:5.0.0")
2. 统一依赖版本
检查项目中所有SQL、数据库迁移相关依赖的版本,确保没有混合Micronaut 3.x和4.x的版本,版本不一致会引发兼容性问题。
3. 确认数据源配置
保证application.yaml中的数据源配置符合Micronaut 4.0规范,示例配置:
datasources: default: url: jdbc:mysql://localhost:3306/your_database driverClassName: com.mysql.cj.jdbc.Driver username: db_user password: db_pass hikari: maximum-pool-size: 10
补充说明
Micronaut 4.0将SQL核心功能与JDBC连接池实现解耦,核心接口(如DataSourceResolver)集中在micronaut-sql-core中,连接池(如Hikari)作为独立依赖引入。完成上述调整后,重新构建启动应用即可解决该注入错误。
内容的提问来源于stack exchange,提问作者user3497321
相关产品推荐
相关产品推荐

