欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

配置数据源的三个步骤是什么(win7配置odbc数据源)

程序员文章站 2023-11-29 14:48:16
1. 概述spring boot使用自以为是的算法来扫描和配置 datasource。这使我们可以轻松获得默认情况下完全配置的datasource实现。此外,spring boot 会自动配置一个闪电...

1. 概述

spring boot使用自以为是的算法来扫描和配置 datasource。这使我们可以轻松获得默认情况下完全配置的datasource实现。

此外,spring boot 会自动配置一个闪电般快速的连接池,hikaricp、 apache tomcat或commons dbcp,根据类路径上的顺序。

尽管 spring boot 的自动datasource配置在大多数情况下运行良好,但有时我们需要更高级别的控制,因此我们必须设置自己的datasource实现,因此跳过自动配置过程。

在本教程中,我们将学习如何在 spring boot 中以编程方式配置数据源

2. maven 依赖

总体而言,以编程方式创建datasource实现非常简单

为了了解如何实现这一点,我们将实现一个简单的存储库层,它将对一些jpa实体执行 crud 操作。

让我们来看看我们的演示项目的依赖项:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>
<dependency>
    <groupid>com.h2database</groupid>
    <artifactid>h2</artifactid>
    <version>2.4.1</version> 
    <scope>runtime</scope> 
</dependency>

如上所示,我们将使用内存中的h2 数据库实例来练习存储库层。通过这样做,我们将能够测试我们以编程方式配置的数据源,而无需执行昂贵的数据库操作。

此外,让我们确保在 maven central 上检查最新版本的
spring-boot-starter-data-jpa

3. 以编程方式配置数据源

现在,如果我们坚持使用 spring boot 的自动datasource配置并在当前状态下运行我们的项目,它将按预期工作。

spring boot 将为我们完成所有繁重的基础设施管道。这包括创建一个 h2数据源实现,它将由 hikaricp、apache tomcat 或 commons dbcp 自动处理,并设置一个内存数据库实例。

此外,我们甚至不需要创建application.properties文件,因为 spring boot 也会提供一些默认的数据库设置。

正如我们之前提到的,有时我们需要更高级别的自定义,因此我们必须以编程方式配置我们自己的datasource实现。

实现这一点的最简单方法是定义一个 datasource工厂方法,并将其放置在一个用@configuration注解注解的类中

@configuration
public class datasourceconfig {
    
    @bean
    public datasource getdatasource() {
        datasourcebuilder datasourcebuilder = datasourcebuilder.create();
        datasourcebuilder.driverclassname("org.h2.driver");
        datasourcebuilder.url("jdbc:h2:mem:test");
        datasourcebuilder.username("sa");
        datasourcebuilder.password("");
        return datasourcebuilder.build();
    }
}

在这种情况下,我们使用了方便的datasourcebuilder类,这是joshua bloch 构建器模式的非流畅版本,以编程方式创建我们的自定义datasource对象

这种方法非常好,因为构建器可以使用一些常用属性轻松配置数据源。它也使用底层连接池。

4.使用application.properties文件外部化数据源配置

当然,也可以部分外部化我们的datasource配置。例如,我们可以在工厂方法中定义一些基本的datasource属性:

@bean 
public datasource getdatasource() { 
    datasourcebuilder datasourcebuilder = datasourcebuilder.create(); 
    datasourcebuilder.username("sa"); 
    datasourcebuilder.password(""); 
    return datasourcebuilder.build(); 
}

然后我们可以在application.properties文件中指定一些额外的:

spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.h2.driver

在外部源中定义的属性,例如上面的application.properties文件,或通过用@configurationproperties注释的类,将覆盖 java api 中定义的属性。

很明显,使用这种方法,我们将不再将datasource配置设置存储在一个地方

另一方面,它允许我们将编译时和运行时配置设置很好地相互分离。

这真的很好,因为它允许我们轻松设置配置绑定点。这样我们就可以包含来自其他来源的不同datasource设置,而无需重构我们的 bean 工厂方法。

5. 测试数据源配置

测试我们的自定义datasource配置非常简单。整个过程归结为创建jpa实体、定义基本存储库接口和测试存储库层。

5.1. 创建 jpa 实体

让我们从定义我们的示例 jpa 实体类开始,它将为用户建模:

@entity
@table(name = "users")
public class user {
    
    @id
    @generatedvalue(strategy = generationtype.auto)
    private long id;
    private string name;
    private string email;

    // standard constructors / setters / getters / tostring
    
}

5.2. 一个简单的存储库层

接下来我们需要实现一个基本的存储库层,它允许我们对上面定义的user实体类的实例执行 crud 操作。

由于我们使用的是spring data jpa,因此我们不必从头开始创建自己的dao实现。我们只需要扩展crudrepository接口即可获得有效的存储库实现:

@repository
public interface userrepository extends crudrepository<user, long> {}

5.3. 测试存储库层

最后,我们需要检查我们以编程方式配置的datasource是否确实在工作。我们可以通过集成测试轻松实现这一点:

@runwith(springrunner.class)
@datajpatest
public class userrepositoryintegrationtest {
    
    @autowired
    private userrepository userrepository;
   
    @test
    public void whencalledsave_thencorrectnumberofusers() {
        userrepository.save(new user("bob", "bob@domain.com"));
        list<user> users = (list<user>) userrepository.findall();
        
        assertthat(users.size()).isequalto(1);
    }    
}


userrepositoryintegrationtest
类是不言自明。它只是使用两个存储库接口的 crud 方法来持久化和查找实体。

请注意,无论我们决定以编程方式配置我们的datasource实现,还是将其拆分为 java 配置方法和application.properties文件,我们都应该始终获得有效的数据库连接

5.4. 运行示例应用程序

最后,我们可以使用标准的main()方法运行我们的演示应用程序:

@springbootapplication
public class application {

    public static void main(string[] args) {
        springapplication.run(application.class, args);
    }

    @bean
    public commandlinerunner run(userrepository userrepository) throws exception {
        return (string[] args) -> {
            user user1 = new user("john", "john@domain.com");
            user user2 = new user("julie", "julie@domain.com");
            userrepository.save(user1);
            userrepository.save(user2);
            userrepository.findall().foreach(user -> system.out.println(user);
        };
    }
}

我们已经测试了存储库层,因此我们确定我们的datasource已成功配置。因此,如果我们运行示例应用程序,我们应该在控制台输出中看到存储在数据库中的用户实体列表。