Druid是阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好。它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。 支持所有JDBC兼容的数据库,包括Oracle、MySQL、Derby、Postgresql、SQL Server、H2等等。 Druid针对oracle和mysql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒以内,复杂SQL用时30微秒。
Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给DataSource对象。
1.配置文件db.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://172.19.57.246:3306/webservice?useUnicode=true&characterEncoding=utf-8
username=root
password=root
filters=stat
initialSize=3
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
2.JdbcUtils工具类
package founder.util; import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection; /**
* @ClassName: JdbcUtils
* @author hanwl
* @date 2019年01月22日
* @Description: TODO
*/ public class JdbcUtils { // 工具类,私有化无参构造函数
private JdbcUtils() {
}
private static JdbcUtils databasePool=null;
private static DruidDataSource dataSource = null; // 静态代码块,加载配置文件。
static{
try{
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
prop.load(in);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(prop); }catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
} public static synchronized JdbcUtils getInstance() {
if(null == databasePool){
databasePool=new JdbcUtils();
}
return databasePool;
} /**
* 创建数据库连接实例
* @return 数据库连接实例 connection
*/
public DruidPooledConnection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
throw new RuntimeException("获取数据库连接异常");
} /**
* 关闭数据库连接实例
*/
public static void releaseSqlConnection(ResultSet rSet, PreparedStatement pStatement,PreparedStatement iStatement, Connection connection) {
try {
if (rSet != null) {
rSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pStatement != null) {
pStatement.close();
}
if(iStatement!=null){
iStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} }