Spring Boot迁移报错NoSuchMethodError:HikariDataSource方法缺失
解决HikariDataSource.getMetricsTrackerFactory()方法找不到的问题
这个错误的核心原因是HikariCP版本与Spring Boot 2.5.6不兼容:
- Spring Boot 2.5.x系列默认依赖的HikariCP版本是2.7.10,
getMetricsTrackerFactory()方法是HikariCP 2.7.x版本新增的 - 你当前使用的HikariCP 2.5.1版本过于老旧,不存在该方法,导致反射调用时抛出NoSuchMethodError
解决方案
1. 移除手动指定的HikariCP依赖
Spring Boot的spring-boot-starter-jdbc或spring-boot-starter-data-jpa已经内置了适配版本的HikariCP,无需手动在pom.xml或build.gradle中指定HikariCP版本。直接删除项目中手动引入的HikariCP 2.5.1依赖,让Spring Boot的依赖管理自动维护兼容版本。
2. 简化数据源配置(推荐)
Spring Boot支持自动配置HikariDataSource,完全不需要手动编写@Bean配置类。只需在application.yml或application.properties中配置数据源参数即可:
spring: datasource: url: jdbc:mysql://localhost:3306/your_db username: db_user password: db_pass driver-class-name: com.mysql.cj.jdbc.Driver hikari: # 可选:添加HikariCP自定义配置,比如连接池大小 maximum-pool-size: 10 connection-timeout: 30000
3. 若必须手动配置Bean
如果因特殊需求必须手动创建DataSource Bean,建议使用Spring Boot提供的HikariDataSourceBuilder而非通用的DataSourceBuilder,同时确保依赖版本正确:
@Primary @Bean(destroyMethod = "close") DataSource dataSource(DatasourceProperties datasourceProperties) { return HikariDataSourceBuilder.create() .url(datasourceProperties.getUrl()) .username(datasourceProperties.getUsername()) .password(datasourceProperties.getPassword()) .driverClassName(datasourceProperties.getDriverClassName()) .build(); }
验证依赖版本
可以通过Maven的dependency:tree命令或Gradle的dependencies命令,检查项目中实际生效的HikariCP版本,确认是Spring Boot适配的2.7.10版本。
内容的提问来源于stack exchange,提问作者TCH
相关产品推荐
相关产品推荐

