锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. SpringBoot集成Hikari连接池及其原理和配置详解

SpringBoot集成Hikari连接池及其原理和配置详解

0
  • 软件开发
  • 发布于 2024-08-16
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

Spring Boot 集成 Hikari 连接池及其原理和配置详解

在现代 Java 开发中,选择一个高效的数据库连接池至关重要。HikariCP 和 Druid 作为高性能的 JDBC 连接池,都因其独特的优势在开发者中备受青睐。在这篇文章中,我们将介绍如何在 Spring Boot 项目中集成 Hikari 连接池,并详细讲解其工作原理和主要配置参数。同时,我们将对比 HikariCP 和 Druid,介绍它们各自的优缺点。我们将基于一个简单的用户管理系统来进行示范。

一、项目环境

  • Spring Boot:用于快速构建 Spring 应用的框架。
  • MySQL:作为关系型数据库管理系统。
  • MyBatis:一个优秀的持久层框架,用于简化数据库操作。
  • HikariCP:高性能的 JDBC 连接池。
  • Druid:高效的数据库连接池,提供强大的监控和扩展功能。
  • Maven:项目管理和构建工具。
  • application.yml:Spring Boot 项目的配置文件。

二、项目搭建

首先,我们需要创建一个 Spring Boot 项目。你可以使用 Spring Initializr 快速生成项目,选择所需的依赖项,包括 Spring Web、Spring Data JPA、MySQL 驱动和 MyBatis。

1. 配置 pom.xml

在项目的 pom.xml 文件中添加所需的依赖:

<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://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>user-management</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>user-management</name>
    <description>User Management Application</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.4.5</version>
        </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>
            </plugin>
        </plugins>
    </build>
</project>
2. 配置 application.yml

在 src/main/resources 目录下创建或编辑 application.yml 文件,添加 Hikari 数据源的配置:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/inner-test?characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      connection-test-query: SELECT 1
      pool-name: DatebookHikariCP
      maximum-pool-size: 10
      minimum-idle: 5
      idle-timeout: 600000
      max-lifetime: 1800000
      connection-timeout: 30000
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.entity

三、Hikari 连接池原理及主要配置参数

1. HikariCP 简介

HikariCP 是一个高性能的 JDBC 连接池,它以其快速、轻量和高效的特点在众多连接池中脱颖而出。HikariCP 的设计目标是提供最小化的性能开销,并在高并发环境中提供优异的性能。

2. HikariCP 的工作原理

HikariCP 的核心是一个连接池管理器,它负责维护一个最小和最大数量的数据库连接。连接池管理器会在初始化时创建一些数据库连接,并根据需要动态增加或减少连接数量。当应用程序请求一个数据库连接时,连接池管理器会从池中分配一个可用的连接;当应用程序释放连接时,连接池管理器会将连接返回到池中,以便后续使用。

HikariCP 通过优化连接的获取和释放过程,以及减少不必要的开销,实现了极高的性能。同时,HikariCP 提供了一些高级功能,如连接泄漏检测、JMX 监控等,以帮助开发者更好地管理和监控数据库连接。

3. HikariCP 的主要配置参数
  • jdbc-url:数据库连接 URL。
  • username:数据库用户名。
  • password:数据库密码。
  • maximum-pool-size:连接池中最大连接数。
  • minimum-idle:连接池中最小空闲连接数。
  • idle-timeout:连接池中连接的空闲超时时间。
  • max-lifetime:连接在连接池中存活的最大时间。
  • connection-timeout:从连接池中获取连接的最大等待时间。

四、用户管理系统示例

为了演示如何集成 HikariCP 和使用它的主要配置参数,我们将创建一个简单的用户管理系统。这个系统允许我们进行用户的增删改查操作。

1. 数据库表设计

首先,在 MySQL 数据库中创建一个名为 userdb 的数据库,并创建一个 user 表:

CREATE DATABASE userdb;
USE userdb;

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 创建实体类

在 src/main/java/com/example/entity 目录下创建 User 类:

package com.example.entity;

import java.sql.Timestamp;

public class User {
    private Integer id;
    private String name;
    private String email;
    private String password;
    private Timestamp createdAt;

    // getters and setters
}
3. 创建 Mapper 接口

在 src/main/java/com/example/mapper 目录下创建 UserMapper 接口:

package com.example.mapper;

import com.example.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);

    @Select("SELECT * FROM user")
    List<User> getAllUsers();

    @Insert("INSERT INTO user(name, email, password, created_at) VALUES(#{name}, #{email}, #{password}, #{createdAt})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);

    @Update("UPDATE user SET name=#{name}, email=#{email}, password=#{password} WHERE id=#{id}")
    void updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);
}
4. 创建服务层

在 src/main/java/com/example/service 目录下创建 UserService 类:

package com.example.service;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    public void insertUser(User user) {
        userMapper.insertUser(user);
    }

    public void updateUser(User user) {
        userMapper.updateUser(user);
    }

    public void deleteUser(int id) {
        userMapper.deleteUser(id);
    }
}
5.

创建控制器

在 src/main/java/com/example/controller 目录下创建 UserController 类:

package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable int id) {
        return userService.getUserById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public void createUser(@RequestBody User user) {
        userService.insertUser(user);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable int id, @RequestBody User user) {
        user.setId(id);
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }
}

五、HikariCP 与 Druid 的对比

1. HikariCP 优缺点

优点:

  • 性能高:HikariCP 在连接获取和释放方面进行了大量优化,性能表现优异。
  • 轻量级:HikariCP 代码量少,运行时占用内存低。
  • 简单配置:HikariCP 提供了一些常用的配置选项,使用方便。

缺点:

  • 监控功能有限:相比 Druid,HikariCP 的内置监控功能较少。
  • 社区支持较少:HikariCP 的社区规模和文档资源相对较少。
2. Druid 优缺点

优点:

  • 强大的监控功能:Druid 提供了丰富的监控和统计功能,可以详细了解连接池的运行状况。
  • 多种扩展功能:Druid 支持多种数据库,并且提供 SQL 解析、防火墙等功能。
  • 配置灵活:Druid 提供了大量的配置选项,可以根据需求进行细粒度的调整。

缺点:

  • 性能稍逊:虽然 Druid 的性能也非常优秀,但在某些场景下,HikariCP 的表现更佳。
  • 较重:Druid 相比 HikariCP 更加复杂,运行时占用的资源也更多。

六、总结

在这篇文章中,我们详细介绍了如何在 Spring Boot 项目中集成 Hikari 连接池,并展示了一个简单的用户管理系统示例。同时,我们还对比了 HikariCP 和 Druid,介绍了它们各自的优缺点。

总的来说,HikariCP 以其高性能和轻量级的特点适合对性能有极高要求的应用,而 Druid 则以其强大的监控和扩展功能适合需要全面管理和监控数据库连接的应用。根据具体项目的需求,开发者可以选择合适的连接池来优化应用的性能和稳定性。

标签: #Spring Boot 173 #软件开发 1171 #JAVA 991
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.