我们知道常用的数据库连接池大概有hikari, druid, tomcatjdbc, dbcp, c3p0。网上有很多对他们的性能和适用场景的分析。
这里简单说一下结论,从性能看hikari, druid, tomcatjdbc, dbcp, c3p0是依次递减的,其中c3p0基本上不建议大家使用了。
性能最好的是hikari,其次是druid,其中druid的优势在于还提供了性能监控。hikari则是号称最快的连接池,而且Springboot从2.x.x版本开始已经把它配置为默认的数据库连接池了。我们今天重点看一下druid和hikari如何整合。
整合druid
首先导入数据库驱动包和druid包依赖
mysql
mysql-connector-java
5.1.6
com.alibaba
druid
1.0.9
然后你需要在bean的配置文件里面配上数据源:
这里只写了最基础的连接配置参数,关于druid参数的连接配置参数,可以参考druid官网的说明。
测试类:
public class DruidDemo_1 {
public static void main(String[] args){
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DruidConnUtils.getConnection();
String sql = "insert into account values(1,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "david");
pstmt.setDouble(2, 3000);
int count = pstmt.executeUpdate();
System.out.println("SQL exec success, count is " + count);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DruidConnUtils.close(pstmt, conn);
}
}
}
Druid连接池的工具类:
public class DruidConnUtils {
private static DataSource ds;
static {
try{
Properties pro = new Properties();
InputStream is = DruidConnUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//Druid连接池是通过工厂类DruidDataSourceFactory来获取的
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//获取连接池
public static DataSource getDataSource() {
return ds;
}
//释放资源
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close(); //将连接释放,归还到连接池
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//释放资源
public static void close(Statement stmt, Connection conn, ResultSet rs) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close(); //将连接释放,归还到连接池
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
运行一下,正确的插入了一条记录:
image.png
在sql中查看到了这条记录:
image.png
整合hikari
hikari的配置和druid步骤是一样的,先导入数据库驱动和hikari包
mysql
mysql-connector-java
5.1.6
com.zaxxer
HikariCP
2.4.13
然后配置你的数据源:
参考资料:
https://www.cnblogs.com/L-tianyi/archive/2017/12/29/8143103.html