1、为什么要使用连接池?
-
传统JDCBC手动连接管理,每次操作都创建连接,频繁创建/关闭连接消耗资源。
-
每次获取连接都要经过TCP三次握手、认证等,开销大。
-
连接池预先创建一批连接,使用时从池中获取,用完归还,避免重复创建。
-
HikariCP 的设计目标是尽可能减少开销,从而提高性能。
2、HikariCP简介
HikariCP 是目前性能最好的Java数据库连接池,是轻量级的 JDBC 连接池,旨在提供快速和高效的数据库连接管理。
3、HikariCP连接池使用(maven项目)
3.1 添加依赖pom.xml
<!-- HikariCP依赖 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
<!-- MySQL驱动(根据你的数据库选择) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
3.2 创建HikariCP工具类
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HikariCPUtil {
public static void main(String[] args){
//1.创建HikariCP配置
HikariConfig config = new HikariConfig();
//2.配置数据库连接参数
config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db");
config.setUsername("root");
config.setPassword("123456");
//3.配置连接池参数(连接池大小)
config.setMaximumPoolSize(20); // 最大连接数,默认10
config.setMinimumIdle(10); // 最小空闲连接数,默认等于maximumPoolSize
config.setConnectionTimeout(30000); // 获取连接超时时间(毫秒),默认30000(30秒)
config.setIdleTimeout(600000); // 连接空闲超时(毫秒),默认600000(10分钟)
config.setMaxLifetime(1800000); // 连接最大生命周期(毫秒),默认1800000(30分钟)
config.setConnectionTestQuery("SELECT 1"); //测试连接是否有效
//4.创建数据源
HikariDataSource dataSource = new HikariDataSource(config);
//5.获取连接并使用
try {
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
if(rs.next()){
System.out.println("连接成功!测试结果: " + rs.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6.关闭连接池
dataSource.close();
}
}
}
3.3 配置文件方式
可以创建一个 hikari.properties 文件,然后在代码中加载它:
# hikari.properties
jdbcUrl=jdbc:mysql://localhost:3306/test_db
username=your_username
password=your_password
maximumPoolSize=10
minimumIdle=2
idleTimeout=30000
connectionTimeout=30000
maxLifetime=1800000
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HikariCPUtil {
public static void main(String[] args){
//1.创建HikariCP配置,并加载配置文件
HikariConfig config = new HikariConfig("path/to/hikari.properties");
//2.创建数据源
HikariDataSource dataSource = new HikariDataSource(config);
//3.获取连接并使用
try {
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
if(rs.next()){
System.out.println("连接成功!测试结果: " + rs.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//4.关闭连接池
dataSource.close();
}
}
}