代码之家  ›  专栏  ›  技术社区  ›  Tomas Lukac

未能加载驱动程序类com.mysql.jdbc.driver

  •  2
  • Tomas Lukac  · 技术社区  · 7 年前

    我正在尝试用两个配置文件运行我的Spring引导后端,一个使用H2内存数据库,另一个使用MySQL。H2数据库工作得很好,但当我切换到MySQL时,我得到了

    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource:
    
        Property: driverclassname
        Value: com.mysql.jdbc.Driver;
        Origin: "driverClassName" from property source "source"
        Reason: Failed to load driver class com.mysql.jdbc.Driver; in either of HikariConfig class loader or Thread context classloader
    
    Action:
    
    Update your application's configuration
    

    mysql连接器java 依赖解决了它。我现在不知道。

    应用程序属性

    spring.profiles.active=@profilename@
    
    #H2 in memory database
    domain.datasource.type=H2
    domain.datasource.url=jdbc:h2:mem:store;MODE=MYSQL;
    domain.datasource.driver-class=org.h2.Driver
    domain.datasource.username=sa
    domain.datasource.password=
    domain.datasource.generate-dll=true
    

    application-local\u mysql.properties属性

    spring.profiles.active=@profilename@
    
    #MySQL local database
    domain.datasource.type=MYSQL
    domain.datasource.url=jdbc:mysql://localhost:3600/store;
    domain.datasource.driver-class=com.mysql.jdbc.Driver;
    domain.datasource.username=store
    domain.datasource.password=store
    domain.datasource.generate-dll=false
    

    pom.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>sk.personal</groupId>
        <artifactId>my-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>my-project</name>
        <description>My personal project.</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.0.5.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
        </dependencies>
    
        <profiles>
            <profile>
                <id>local_h2</id>
                <properties>
                    <profilename>local_h2</profilename>
                </properties>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
            <profile>
                <id>local_mysql</id>
                <properties>
                    <profilename>local_mysql</profilename>
                    <maven.test.skip>true</maven.test.skip>
                </properties>
            </profile>
        </profiles>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
    import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
    
    import javax.sql.DataSource;
    
    @Configuration
    public class DatasourceConfig {
    
        @Value("${domain.datasource.url}")
        private String url;
    
        @Value("${domain.datasource.username}")
        private String username;
    
        @Value("${domain.datasource.password}")
        private String password;
    
        @Value("${domain.datasource.type}")
        private String type;
    
        @Value("${domain.datasource.driver-class}")
        private String driverClass;
    
        @Bean
        public DataSource dataSource() {
            if (type.equals("MYSQL")) {
                return DataSourceBuilder
                        .create()
                        .username(username)
                        .password(password)
                        .url(url)
                        .driverClassName(driverClass)
                        .build();
            } else {
                EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
                return builder
                        .setType(EmbeddedDatabaseType.H2)
                        .build();
            }
        }
    }
    
    3 回复  |  直到 5 年前
        1
  •  52
  •   IKo    7 年前

    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
        2
  •  9
  •   Tomas Lukac    7 年前

    答案太令人尴尬了。我在application.properties的驱动行后面加了一个分号。。。 显然,它不认识那个司机。

        3
  •  9
  •   Andreas    6 年前

    我在使用springboot2.2.0.RELEASE时遇到了一个问题,需要连接到一个旧的Mysql DB(5.1.73),这要求我降级到Mysql connector java版本5.1.38

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    

    因为Spring boot需要一个更新的mysql java连接器,它已经被重命名为com.mysql.cj.jdbc.Driver,所以我还必须在Spring boot db config中添加Spring数据源驱动程序类名设置。

    spring:
      datasource:
       url: 'localhost'
       password: password
       username: user
       driver-class-name: com.mysql.jdbc.Driver
    
        4
  •  8
  •   Omid Rostami    7 年前

    只需添加mysql和jdbc依赖项,如下所示

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
    
        5
  •  4
  •   Andreas dfa    7 年前

    8.x码 ,其中驱动程序的命名与以前版本不同:

    com.mysql.cj.jdbc.Driver

        6
  •  3
  •   Ganesh Giri    6 年前

    Property: driverclassname
    Value: com.mysql.cj.jdbc.Driver
    Origin: "driverClassName" from property source "source"
    

    原因:无法在HikariConfig类加载器或线程上下文类加载器中加载驱动程序类com.mysql.cj.jdbc.driver

    所以我刚刚添加了mysql依赖项:

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    尝试升级驱动程序。因为Mysql社区已经更新了 com.mysql.jdbc.Driver到com.mysql.cj.jdbc。 Check More Details

        7
  •  2
  •   famabenda Nitish Patil    6 年前

    将数据库驱动程序依赖范围更改为“runtime”

    例如:

       <dependency>
            <groupId>com.{yourDatabaseGroupid}</groupId>
            <artifactId>{yourDatabaseArtifactId}</artifactId>
            <scope>runtime</scope>
        </dependency>
    
        8
  •  0
  •   Od Chan    6 年前

    我和你有同样的问题。对我来说,这是因为有h2数据库依赖!

        9
  •  0
  •   Harsha    5 年前
        10
  •  0
  •   Abd Abughazaleh    5 年前

    您应该添加: spring.datasource.driver-class-name=com.mysql.jdbc.Driver 应用程序属性 文件。

    我的**application.properties:**

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
    spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
    spring.datasource.username=root
    
        11
  •  0
  •   MakiX    5 年前

    在Intellij中,进入项目结构( ctrl+alt+maj+S组合键 看看你有没有问题。

    马文 在侧边栏中:clic on “为所有项目生成源并更新文件夹”

        12
  •  0
  •   Junaed    5 年前

    在intellij中: 构建->重建项目 帮我解决了问题!

    enter image description here

    pom.xml文件 enter image description here

    应用程序属性: enter image description here