使用Java开发程序用到了Springboot连接MySQL数据库时遇到以下错误:Not loading a JDBC driver as driverClassName property is null. 但是我在配置程序时明明写了 spring.datasource.driver-class-name com.mysql.jdbc.Driver.
经过排查原来是我配置问题,mysql 自从升级到了8.0后,这个数据库驱动也换了,8.0的用com.mysql.cj.jdbc.Driver, 5.7的用com.mysql.jdbc.Driver。我需要重新导入依赖包了,最后它的配置是这个样子的:
spring:
datasource:
druid:
url:
driver-class-name: com.mysql.cj.jdbc.Driver
username:
password:
initial-size: 10
max-active: 50
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
报错机理与排查清单
这个报错的直接含义是:Spring 在装配数据源时发现 driverClassName 为空,于是跳过了驱动加载。你明明配置了,但配置没有生效,问题出在配置本身而非驱动。
- MySQL 8 必须使用新驱动类 com.mysql.cj.jdbc.Driver(旧类 com.mysql.jdbc.Driver 在 5.x 驱动里,8.x 已迁移);
- 检查 yml 的缩进层级,driver-class-name 必须在 datasource 正下方,缩进错一格整段配置都会失效;
- maven 依赖确认使用 mysql-connector-j(8.0 起 artifactId 由 mysql-connector-java 更名),scope 不要误写成 provided;
- URL 记得带时区与编码参数,8.x 驱动不再默认 EST 时区。