在Java中,HikariCP是目前最优秀的一款数据库连接池技术,可以称之为: 新秀
使用:
maven依赖:
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
配置文件
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=root
此处有一个小坑,一定要根据自定的实际情况进行配置,和使用.
使用了别人的技术,就得按照别人暴露的参数进行配置.
数据库连接池工具类:
package com.fagejiang.single.datasource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import javax.sql.DataSource;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Objects;
import java.util.Properties;
/**
* HikariCP jdbc 数据库连接池工具
*
* @author <发哥讲Java-694204477@qq.com>
* @version 1.0
* @date 2021/6/6 13:39
*/
@Slf4j
public class HikariCPUti {
private final static HikariCPUti HIKARI_CP_UTI = new HikariCPUti();
private static Properties properties = null;
private static HikariDataSource dataSource = null;
//1.单例模式中,创建私有构造方法
private HikariCPUti() {
// 私有构造
}
/**
* 1.配置和获取数据库连接配置信息
* 2.扩展HikariCP功能,进行配置
* 3.获取数据库连接,提供对外获取数据库资源的方法
*/
private void initConfig() throws IOException {
String filePath = Objects.requireNonNull(HikariCPUti.class.getClassLoader().getResource("hikaricp.properties")).getFile();
FileReader fileReader = new FileReader(filePath);
properties = new Properties();
properties.load(fileReader);
properties.forEach((k, v) -> {
log.debug(String.format("key:%s value:%S", k, v));
});
log.info("初始化配置文件成功.....");
}
private void registerHikariCP() {
if (null != dataSource) {
return;
}
HikariConfig config = new HikariConfig(properties);
dataSource = new HikariDataSource(config);
}
//2.提供对外 获取 HikariCPDatasource 的方法
public static DataSource getHikariCPDataSource() {
if (null != dataSource) {
return dataSource;
}
try {
HIKARI_CP_UTI.initConfig();
HIKARI_CP_UTI.registerHikariCP();
} catch (IOException e) {
e.printStackTrace();
}
return dataSource;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
DataSource dataSource = HikariCPUti.getHikariCPDataSource();
System.out.println(Thread.currentThread().getName() + " dataSource = " + dataSource);
//Thread-5 dataSource = HikariDataSource (HikariPool-6)
// 可以明显的看出来 是默认使用了数据库连接池 HikariPool....
}).start();
}
/**
* 测试和验证 datasource 的准确性
*/
String sql = "SELECT NOW() nowDate, ROUND(( RAND()* 100 )) randVal;";
// 获取数据库资源
DataSource dataSource = HikariCPUti.getHikariCPDataSource();
// 使用 try-resource-catch 方式,自动关闭资源
try (
//获取数据库连接
Connection connection = dataSource.getConnection();
//预编译
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//获取结果
ResultSet resultSet = preparedStatement.executeQuery();
) {
ResultSetMetaData metaData = preparedStatement.getMetaData();
while (resultSet.next()) {
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
log.info(metaData.getColumnName(i) + " : " + resultSet.getObject(i));
}
}
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
}
}
日志使用可以参考的我另外一个博客: Java集成日志框架logback搭配lombok_发哥讲Java的博客-优快云博客