无法加载 JDBC 驱动程序类 [com.mysql.cj.jdbc.Driver]
Posted
技术标签:
【中文标题】无法加载 JDBC 驱动程序类 [com.mysql.cj.jdbc.Driver]【英文标题】:Could not load JDBC driver class [com.mysql.cj.jdbc.Driver] 【发布时间】:2019-12-21 00:23:11 【问题描述】:我的 Spring Boot 应用中有以下类:
@Configuration
public class JDBCTokenConfig
...
@Value("$spring.datasource.driver-class-name")
private String dbDriverClassName;
@Bean
public DataSource dataSource()
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(dbDriverClassName);
dataSource.setUrl(datasourceUrl);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);
return dataSource;
我的 pom.xml 中还有以下内容:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
在我的 application.properties 我有:
...
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
但我看到以下错误:
Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.cj.jdbc.Driver]
这是正确的驱动器类路径吗?还是别的什么?
【问题讨论】:
您不需要 dataSource.setDriverClassName(dbDriverClassName)。只需将其与@Value 一起注释掉 谢谢。我尝试删除 setDriverClassName ,它似乎也可以正常工作。太好了,代码少了:) 【参考方案1】:尝试使用 com.mysql.jdbc.Driver
当 pom.xml 中未显式提供版本时,Spring 使用以下预配置版本作为依赖项: https://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions
这里将使用以下版本的mysql-connector-java。 5.1.47
对于 mysql-connector-java v5.1.47,正确的驱动程序类是 com.mysql.jdbc.Driver
您还可以提供版本依赖项以使用最新驱动程序:com.mysql.cj.jdbc.Driver
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
【讨论】:
正如你提到的,我在 pom 中添加了最新版本的 mysql 连接器。但是,我仍然收到java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.cj.jdbc.driver]
错误。这是连接代码:DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.driver"); dataSource.setUrl("jdbc:mysql://xx.x.x.x:x/xxx"); dataSource.setUsername("xxx"); dataSource.setPassword("xxx!"); JdbcTemplate template = new JdbcTemplate(dataSource); SqlRowSet sqlRowSet = template.queryForRowSet("SELECT * FROM dbo.xxx;")
驱动程序名称是错字吗? com.mysql.cj.jdbc.Driver ,是正确的 Driver 类名
未来读者:“com.mysql.cj.jdbc.Driver”似乎与这种方言“org.hibernate.dialect.MySQL8Dialect”齐头并进。至少对于“8.0.21”以上是关于无法加载 JDBC 驱动程序类 [com.mysql.cj.jdbc.Driver]的主要内容,如果未能解决你的问题,请参考以下文章
无法加载 JDBC 驱动程序类“com.mysql.jdbc.Driver”Tomcat 8 和 Eclipse
无法加载 JDBC 驱动程序类 [com.mysql.cj.jdbc.Driver]
无法获得 JDBC 连接;嵌套异常是 java.sql.SQLException:无法加载 JDBC 驱动程序类 'org.hsql.jdbcDriver'
Spring JDBC 无法加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver]