无法加载 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]的主要内容,如果未能解决你的问题,请参考以下文章

Java JDBC

Java JDBC

无法加载 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]