Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目。Druid支持所有JDBC兼容数据库,包括了Oracle、MySQL、PostgreSQL、SQL Server、H2等。Druid在监控、可扩展性、稳定性和性能方面具有明显的优势。通过Druid提供的监控功能,可以实时观察数据库连接池和SQL查询的工作情况。使用Druid连接池在一定程度上可以提高数据访问效率。
第一步在pom.xml里加入依赖库。
<dependencies>
<!-- MySQL相关包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>
</dependencies>
第二步创建jdbc.properties文件,我相信同学们会创建javacto.taobao.com学习网址
第三步创建DBUtil.java
package com.javacto.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 学习网址:javacto.taobao.com
*/
public class DBUtil {
// 声明druid连接池对象
private static DruidDataSource pool;
/** 数据库 链接URL地址 **/
private static String url;
/** 账号 **/
private static String username;
/** 密码 **/
private static String password;
/** 初始连接数 **/
private static int initialSize = 5;
/** 最大活动连接数 **/
private static int maxActive = 5;
/** 最小闲置连接数 **/
private static int minIdle = 5;
/** 连接耗尽时最大等待获取连接时间 **/
private static long maxWait = 1000;
private static String fileName = "/jdbc.properties";
static {
init();
}
/**
* 加载属性文件并读取属性文件中的内容将其设置给连接信息
*
* @param propName
*/
private static void loadProp() {
try {
// 属性文件位于src根目录时,加"/"则不要使用ClassLoader,如果使用ClassLoader则无需"/"
InputStream is = DBUtil.class.getResourceAsStream(fileName);
Properties p = new Properties();
p.load(is);
url = p.getProperty("jdbc.url");
username = p.getProperty("jdbc.username");
password = p.getProperty("jdbc.password");
/*
* initialSize = Integer.parseInt(p.getProperty("initialSize"));
* maxActive = Integer.parseInt(p.getProperty("maxActive")); maxWait
* = Integer.parseInt(p.getProperty("maxWait")); minIdle =
* Integer.parseInt(p.getProperty("minIdle"));
*/
} catch (IOException e) {
e.printStackTrace();
}
}
private static void init() {
pool = new DruidDataSource();
// 加载属性文件,初始化配置
loadProp();
pool.setUrl(url);
pool.setUsername(username);
pool.setPassword(password);
// 设置连接池中初始连接数
pool.setInitialSize(initialSize);
// 设置最大连接数
pool.setMaxActive(maxActive);
// 设置最小的闲置链接数
pool.setMinIdle(minIdle);
// 设置最大的等待时间(等待获取链接的时间)
pool.setMaxWait(maxWait);
}
/**
* 链接获取
*
* @return
*/
public static Connection getConn() {
try {
// 如果连接池为空或者被异常关闭,则重新初始化一个
if (pool == null || pool.isClosed()) {
init();
}
return pool.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 资源关闭
*
* @param stmt
* @param conn
*/
public static void close(Statement stmt, Connection conn) {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 封装通用的更新操作,对所有更新(INSERT,UPDATE,DELETE)有关的操作都能通过该方法实现
*
* @param sql
* @return
*
*/
public static boolean exeUpdate(Connection conn, String sql, Object... obj) {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject(i + 1, obj[i]);
}
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(ps, null);
}
return false;
}
//测试
public static void main(String[] args) {
System.out.println(DBUtil.getConn());
}
}
更多学习资料:javacto.taobao.com