【问题标题】:Class Not Found Exception org//h2//Driver类未找到异常 org//h2//Driver
【发布时间】:2021-03-27 18:18:54
【问题描述】:

我正在学习 Spring Framework 并尝试从 .properties 文件中注入属性。

这是我的 .properties 文件

sprint.datasource.username=hamnghi
sprint.datasource.password=hamnghi
sprint.datasource.url=jdbc:h2:~/test;
sprint.datasource.driver=org.h2.Driver;

当我尝试将driver 字段传递给Class.forName(drive) 时,程序无法连接到 数据库并抛出了一个java.lang.ClassNotFoundException: org/h2/Driver;,但它将driver变量作为“org.h2.Driver”打印到控制台就好了。 My console screenshot

我也用Class.forName("org.h2.Driver") 运行了这个程序,运行良好;但是,当我用 driver 替换它时,它不起作用

这是我的课。

package H2Database.db_connection;

import H2Database.functionality.Logging;
import org.springframework.beans.factory.annotation.Value;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Logger;

public class H2Connection {
    private final static Logger logger = Logging.getLogger();

    @Value("${sprint.datasource.url}")
    private String url;

    @Value("${sprint.datasource.username}")
    private String username;

    @Value("${sprint.datasource.password}")
    private String password;

    @Value("${sprint.datasource.driver}")
    private  String driver;

    public Connection open(){
        try {
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, username, password);
            return connection;
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public String toString() {
        return "H2Connection{" +
                "url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", driver='" + driver + '\'' +
                '}';
    }
}

【问题讨论】:

  • 当 Boot 为你做这一切时,你为什么要做这一切?此外,您似乎正在学习超过 14 年的教程,因为从那时起就不再需要 Class.forName

标签: java spring-boot dependency-properties


【解决方案1】:

已编辑 您的配置中有尾随 ;。删除它

异常意味着在类路径中找不到特定的类。

需要添加包含h2对应实现的依赖:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

【讨论】:

  • 您好,当我使用Class.forName("org.h2.Driver") 时程序运行良好,但是当我将其替换为driver 时,它就失败了。另外,我还在 pom.xml 文件中添加了您建议的依赖项,但仍然无法正常工作。
  • 你有尾随;在你的配置中。删除它
  • 非常感谢。这是一个愚蠢的错误。
【解决方案2】:

您应该完成以下步骤以将 H2 数据库配置到您的 Spring MVC 应用程序。

第一步:在 pom.xml 文件中添加如下依赖

<dependency>  
    <groupId>com.h2database</groupId>  
    <artifactId>h2</artifactId>  
    <scope>runtime</scope>  
</dependency>

第 2 步:在 application.properties 文件中配置这些属性。

spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driverClassName=org.h2.Driver  
spring.datasource.username=sa  
spring.datasource.password=  
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

注意: Spring MVC 不会自动配置 应用程序.属性。您应该使用配置对其进行配置 类。

第 3 步:配置数据库。

@Configuration
@PropertySource("classpath:application.properties")
public class DataSourceConfig {

    @Value("${sprint.datasource.url}")
    private String url;

    @Value("${sprint.datasource.username}")
    private String username;

    @Value("${sprint.datasource.password}")
    private String password;

    @Value("${sprint.datasource.driver}")
    private  String driver;

    @Bean
    public DataSource testDataSource() {
        BasicDataSource bds = new BasicDataSource();
        bds.setDriverClassName(driver);
        bds.setUrl(url);
        bds.setUsername(username);
        bds.setPassword(password);
        return bds;
    }
}

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2013-04-09
    • 2016-09-13
    相关资源
    最近更新 更多