使用 Spring 配置数据库连接池:HikariCP 与 Apache DBCP

引言

在现代企业级应用中,数据库连接池是一个关键组件,可以显著提高应用程序的性能和稳定性。Spring 框架提供了对多种连接池的支持,其中包括 HikariCP 和 Apache DBCP。这篇文章将详细介绍如何在 Spring 项目中配置这两种流行的数据库连接池。

配置 HikariCP

添加依赖

首先,需要在 pom.xml 文件中添加 HikariCP 和数据库驱动程序的依赖。以下是使用 H2 数据库的示例:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

配置文件

application.properties 文件中添加 HikariCP 的配置:

properties 复制代码
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=SpringBootHikariCP
spring.datasource.hikari.max-lifetime=2000000
spring.datasource.hikari.connection-timeout=30000

这些配置参数的含义如下:

  • minimum-idle: 连接池中维护的最小空闲连接数。
  • maximum-pool-size: 连接池中维护的最大连接数。
  • idle-timeout: 连接在池中保持空闲状态的最长时间。
  • pool-name: 连接池的名称。
  • max-lifetime: 连接在池中生存的最长时间。
  • connection-timeout: 等待连接超时的时间。

配置类

Spring Boot 默认使用 HikariCP 作为连接池,因此无需额外配置。但如果你需要自定义 DataSource,可以创建一个配置类:

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Value;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

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

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

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

    @Value("${spring.datasource.hikari.minimum-idle}")
    private int minimumIdle;

    @Value("${spring.datasource.hikari.maximum-pool-size}")
    private int maximumPoolSize;

    @Value("${spring.datasource.hikari.idle-timeout}")
    private int idleTimeout;

    @Value("${spring.datasource.hikari.max-lifetime}")
    private int maxLifetime;

    @Value("${spring.datasource.hikari.connection-timeout}")
    private int connectionTimeout;

    @Bean
    public DataSource dataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setJdbcUrl(dbUrl);
        hikariConfig.setUsername(username);
        hikariConfig.setPassword(password);
        hikariConfig.setMinimumIdle(minimumIdle);
        hikariConfig.setMaximumPoolSize(maximumPoolSize);
        hikariConfig.setIdleTimeout(idleTimeout);
        hikariConfig.setMaxLifetime(maxLifetime);
        hikariConfig.setConnectionTimeout(connectionTimeout);

        return new HikariDataSource(hikariConfig);
    }
}

配置 Apache DBCP

添加依赖

首先,需要在 pom.xml 文件中添加 Apache DBCP 和数据库驱动程序的依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

配置文件

application.properties 文件中添加 Apache DBCP 的配置:

properties 复制代码
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.dbcp2.min-idle=5
spring.datasource.dbcp2.max-idle=10
spring.datasource.dbcp2.max-open-prepared-statements=100
spring.datasource.dbcp2.max-total=20

这些配置参数的含义如下:

  • min-idle: 连接池中保持空闲的最小连接数。
  • max-idle: 连接池中保持空闲的最大连接数。
  • max-open-prepared-statements: 连接池中同时打开的最大预处理语句数。
  • max-total: 连接池中允许的最大连接数。

配置类

如果需要自定义 DataSource,可以创建一个配置类:

java 复制代码
import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Value;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

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

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

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

    @Value("${spring.datasource.dbcp2.min-idle}")
    private int minIdle;

    @Value("${spring.datasource.dbcp2.max-idle}")
    private int maxIdle;

    @Value("${spring.datasource.dbcp2.max-open-prepared-statements}")
    private int maxOpenPreparedStatements;

    @Value("${spring.datasource.dbcp2.max-total}")
    private int maxTotal;

    @Bean
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(dbUrl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxIdle(maxIdle);
        dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
        dataSource.setMaxTotal(maxTotal);

        return dataSource;
    }
}

结论

在本文中,我们详细介绍了如何在 Spring 项目中配置 HikariCP 和 Apache DBCP 数据库连接池。通过配置文件和自定义配置类,可以灵活地管理数据库连接池,提高应用程序的性能和稳定性。

希望本文能帮助你理解如何在 Spring 中使用和配置不同的数据库连接池。如果你有任何问题或建议,欢迎留言讨论。

相关推荐
军军君0129 分钟前
基于Springboot+UniApp+Ai实现模拟面试小工具二:后端项目搭建
前端·javascript·spring boot·spring·微信小程序·前端框架·集成学习
Linn4 小时前
Spring WebSocket 服务实现的主流方案与最佳实践
spring boot·后端·spring
NE_STOP5 小时前
SpringBoot--如何整体读取多个配置属性及其相关操作
java·spring
二饭7 小时前
解决Maven“无法将类 XXXXX 中的构造器 XXXXXX 应用到给定类型”错误
java·spring·maven
努力的小郑7 小时前
Spring监听器(ApplicationEvent):比MQ更轻的异步神器!亿级流量下的咖啡店经营哲学
java·后端·spring
Cyanto17 小时前
Spring注解IoC与JUnit整合实战
java·开发语言·spring·mybatis
qq_4338889317 小时前
Junit多线程的坑
java·spring·junit
gadiaola18 小时前
【SSM面试篇】Spring、SpringMVC、SpringBoot、Mybatis高频八股汇总
java·spring boot·spring·面试·mybatis
写不出来就跑路18 小时前
WebClient与HTTPInterface远程调用对比
java·开发语言·后端·spring·springboot
麦兜*18 小时前
Spring Boot 集成Reactive Web 性能优化全栈技术方案,包含底层原理、压测方法论、参数调优
java·前端·spring boot·spring·spring cloud·性能优化·maven