使用 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 中使用和配置不同的数据库连接池。如果你有任何问题或建议,欢迎留言讨论。

相关推荐
小丁爱养花28 分钟前
Spring MVC:综合练习 - 深刻理解前后端交互过程
java·spring·mvc
是小崔啊1 小时前
Spring源码05 - AOP深入代理的创建
java·spring
马剑威(威哥爱编程)3 小时前
2025春招 SpringCloud 面试题汇总
后端·spring·spring cloud
小高不明7 小时前
仿 RabbitMQ 的消息队列3(实战项目)
java·开发语言·spring·rabbitmq·mybatis
Yeats_Liao8 小时前
Spring 框架:配置缓存管理器、注解参数与过期时间
java·spring·缓存
Yeats_Liao8 小时前
Spring 定时任务:@Scheduled 注解四大参数解析
android·java·spring
码明8 小时前
SpringBoot整合ssm——图书管理系统
java·spring boot·spring
荆州克莱9 小时前
微信小程序获取位置服务
spring boot·spring·spring cloud·css3·技术
程序猿零零漆9 小时前
SpringCloud系列教程:微服务的未来(十五)实现登录校验、网关传递用户、OpenFeign传递用户
spring·spring cloud·微服务
赵相机-9 小时前
Spring集成Redis|通用Redis工具类
spring boot·redis·spring