java中封装数据库连接池工具类应使用hikaricp,通过静态内部类实现线程安全单例,集中配置连接参数,提供getconnection()和closequietly()方法管理连接生命周期,配合try-with-resources自动归还连接。

在 Java 中封装数据库连接池工具类,核心是把连接池的初始化、获取连接、归还连接和关闭资源等操作统一管理,避免重复代码,提升可维护性与线程安全性。推荐使用成熟连接池(如 HikariCP),不建议自己实现连接池。
选择并引入合适的连接池依赖
HikariCP 是目前性能最好、最轻量的 JDBC 连接池,Spring Boot 2.0+ 默认集成它。Maven 引入方式如下:
<dependency><groupid>com.zaxxer</groupid><artifactid>HikariCP</artifactid><version>5.0.1</version></dependency>
封装单例的连接池工具类
用静态内部类方式实现线程安全的懒汉单例,避免同步开销。连接池配置通过属性文件或硬编码统一管理:
- 所有配置项(如 URL、用户名、密码、最大连接数)集中定义,便于修改和环境隔离
- HikariDataSource 是线程安全的,可全局复用,无需每次 new
- 构造方法私有,禁止外部实例化
public class DBPoolUtil {
private static class Holder {
static final HikariDataSource dataSource = initDataSource();
}
<pre class="brush:java;toolbar:false;">private static HikariDataSource initDataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("123456");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
return new HikariDataSource(config);
}
public static DataSource getDataSource() {
return Holder.dataSource;
}}
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
提供简洁的连接获取与释放方法
工具类可进一步封装常用操作,降低使用门槛:
- getConnection():直接返回 Connection,调用方负责 try-with-resources 或手动 close
- closeQuietly(Connection):安全关闭连接,忽略 null 或已关闭异常
- 不封装 executeUpdate/Query 等方法——这属于 DAO 层职责,工具类只管连接生命周期
public static Connection getConnection() throws SQLException {
return getDataSource().getConnection();
}
<p>public static void closeQuietly(Connection conn) {
if (conn != null && !conn.isClosed()) {
try {
conn.close();
} catch (SQLException ignored) {}
}
}</p>配合 try-with-resources 正确使用
获取连接后必须及时归还,推荐用 try-with-resources 自动释放:
try (Connection conn = DBPoolUtil.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE id = ?")) {
ps.setLong(1, 100L);
ResultSet rs = ps.executeQuery();
// 处理结果...
} catch (SQLException e) {
e.printStackTrace();
} // 自动调用 conn.close() → 归还到连接池注意:这里 close() 不是销毁连接,而是将连接返还给池,供后续复用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










