Druid数据库连接池不仅性能高效,还提供完整的监控。
不管是Druid还是C3P0,本质上都是对DataSource接口的一种实现。
Druid除了基础的数据库连接池功能外,还针对SQL、Spring、Web应用、Session等提供了良好的服务监控,同时还提供了SQL防火墙功能。
数据库连接池
Maven配置依赖
$ vim pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
添加数据库连接池配置文件,配置文件名称可自定义,存放位置推荐在resources
文件夹下。
$ vim resources/druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/fw
username=root
password=root
initialSize=10
maxActive=20
maxWait=10000
定义数据库连接池工具类
$ vim util/DruidUtil.java
package com.jc.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DruidUtil {
private static DataSource ds = null;
static {
//导入配置文件
Properties p = new Properties();
InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
try {
p.load(is);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//获取数据源
try {
ds = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//获取数据源
private static DataSource getDataSource(){
return ds;
}
//获取连接
public static Connection getConnection(){
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//释放连接返还连接池
public static void release(Connection conn, Statement stmt, ResultSet rs){
if(rs != null){
try{
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(stmt != null){
try{
stmt.close();
}catch (Exception e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null){
try{
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
conn = null;
}
}
public static void release(Connection conn, Statement stmt){
release(conn, stmt, null);
}
public static void release(Connection conn){
release(conn, null, null);
}
}