使用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 时区。