java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot 整合数据源

SpringBoot 整合数据源的具体实践

作者:zhizhiqiuya

本文主要介绍了SpringBoot 整合数据源的具体实践,利用 Spring Boot 的自动配置和简化的注解来简化数据源配置工作,从而更专注于应用程序的业务逻辑开发,感兴趣的可以了解一下

前言

Spring Boot 是当今最流行的 Java 开发框架之一,它以简洁、高效的特点帮助开发者快速构建稳健的应用程序。在实际项目中,涉及到数据库操作的需求时,我们需要对数据源进行整合。本文将重点介绍如何在 Spring Boot 中整合数据源,以及如何利用 Spring Boot 的便利特性来简化这一过程。

无论是传统的关系型数据库,还是当下流行的 NoSQL 数据库,Spring Boot 都提供了丰富的支持。通过本文的学习,读者将能够掌握在 Spring Boot 中整合各类数据源的方法,并且了解如何利用 Spring Boot 的自动配置和简化的注解来简化数据源配置工作,从而更专注于应用程序的业务逻辑开发。

如果你对 Spring Boot 中数据源整合的方法感到困惑,或者希望了解如何通过 Spring Boot 来更高效地处理数据库操作,那么本文将为你提供宝贵的指导和实用的技巧。让我们一起深入探索 Spring Boot 中数据源整合的精彩世界吧!

一、前期准备

1、新建项目,结构如下

2、导入依赖

<dependencies>
        <!-- spring boot 的核心starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- spring jdbc 的 starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

         <!-- Druid 连接池的 starter -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.18</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>

这是一个关于 Spring Boot 整合数据源的 Maven 依赖配置和构建插件示例。这些依赖项将帮助你在项目中使用 Spring Boot 和相关的数据库连接池进行数据源整合。以下是示例中包含的依赖项和插件说明:

在构建部分,示例使用了 spring-boot-maven-plugin 插件来配置 Docker 镜像构建时所使用的镜像构建器。

二、使用 yml  配置SpringBoot 内置的 hikari 连接池

# 数据源连接池
spring:
  datasource:
    # 连接属性
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/psm
    username: root
    password: 123456
    # SpringBoot 内置的 hikari 连接池
    hikari:
      # 最小空闲连接
      minimum-idle: 5
      # 最大连接数
      maximum-pool-size: 20
      # 最大空闲时长
      idle-timeout: 900000
      # 连接的超时时间
      connection-timeout: 3000
      # 检查连接的有效性
      connection-test-query: select 1

接下来,我们配置了 Spring Boot 内置的 HikariCP 连接池相关的属性:

1、测试一下

@Slf4j
@SpringBootTest
class Ch04ApplicationTests {

    @Autowired
    private DataSource dataSource;


    @Test
    void contextLoads() throws SQLException {

        Connection connection = dataSource.getConnection();
        log.info("连接对象:" + connection);

    }
}

 这是一个简单的Junit测试类,用来验证你在Spring Boot应用中配置数据源连接池是否成功。以下是这个测试类的详细说明:

当你运行这个测试类时,如果能够正常输出连接对象,就说明你已经成功地配置了数据源连接池,并且能够使用它来管理数据库连接了。

运行结果:

三、使用 yml 配置 druid 连接池

# 数据源连接池
spring:
  datasource:
    # 连接属性
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/psm
    username: root
    password: 123456

    # 使用 druid 连接池
    druid:
      # 最大连接数
      max-active: 100
      # 初始化连接数
      initial-size: 10
      # 最小连接池数
      min-idle: 10
      # 最大等待时间
      max-wait: 1000
      # 如果连接空闲时间大于等于( min-evictable-idle-time-millis)
      # 的时长则关闭连接
      time-between-eviction-runs-millis: 60000
      # 连接保持空闲而不被驱逐出连接池
      min-evictable-idle-time-millis: 300000
      # 检查连接有效性
      validation-query: select 1
      # 是否缓存 preparedStatement (MySQL 建议关闭)
      pool-prepared-statements: false

以下是一些重要的设置说明:

 1、测试一下

@Slf4j
@SpringBootTest
class Ch04ApplicationTests {

    @Autowired
    private DataSource dataSource;

    /**
     * 注入 JDBC 的 Template,用于操作数据
     */
    @Autowired
    private JdbcTemplate template;

    @Test
    void contextLoads() throws SQLException {

        Connection connection = dataSource.getConnection();
        log.info("连接对象:" + connection);

    }

    @Test
    public void testJdbcTemplate(){
        List<Map<String, Object>> list = template.queryForList("select * from psm.city_info limit 0,10");
        list.forEach(map -> map.forEach((k,v) -> {
            log.info("键:" + k +"  " + "值:" + v);
        }) );
    }

}

这段代码是一个Spring Boot的测试类,用于测试数据源和JdbcTemplate是否能够正常工作。

首先,在@Autowired注解下,DataSource对象被注入到测试类中。这个数据源对象可以用来获取数据库连接,在contextLoads方法中,通过调用dataSource.getConnection()方法获得了一个数据库连接对象,然后在日志中记录了这个连接对象。

另外,在testJdbcTemplate方法中,可以看到JdbcTemplate对象也被注入到测试类中。JdbcTemplate是Spring框架提供的一个用于简化JDBC操作的工具类,可以用它来执行SQL查询、更新等操作。在这个方法中,使用了template.queryForList方法查询了psm.city_info表的前10行数据,并打印出了每一行数据中的键值对。

通过这些测试,可以验证数据源和JdbcTemplate是否已经正确配置和注入到Spring容器中,以及它们是否能够正常地连接和操作数据库。如果测试通过,则说明你已经成功地配置了数据源和JdbcTemplate,并能够使用它们来操作数据库。

运行结果:

四、hikari 和Druid的区别

Hikari和Druid都是Java语言中常用的数据库连接池。它们之间的不同主要体现在以下几个方面:

综上所述,HikariCP适合那些追求高性能、简洁配置的场景,而Druid则适合那些对监控和扩展性有较高要求的场景。选择哪个连接池取决于具体的项目需求和性能考量。

到此这篇关于SpringBoot 整合数据源的具体实践的文章就介绍到这了,更多相关SpringBoot 整合数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文