参考:https://www.cnblogs.com/xdp-gacl/p/4002804.html
https://blog.csdn.net/zxh707wk/article/details/54237332
https://blog.csdn.net/icanlove/article/details/44097839
一.准备工作
需要下载commons-dbcp2-2.4.0.jar 和 commons-pool2-2.5.0.jar
二.DBCP2数据库连接池工具类
不使用配置文件,直接通过代码设置数据源参数
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlPoolUtil {
private static BasicDataSource dataSource = new BasicDataSource();
//配置数据源
static
{
DataSourceConfig();
}
//以代码形式,设置数据源各属性值
private static void DataSourceConfig(){
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("******");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false");
dataSource.setInitialSize(20);
dataSource.setMaxTotal(80);
dataSource.setMaxIdle(40);
dataSource.setMinIdle(20);
dataSource.setMaxWaitMillis(6000);
}
//获得连接对象
public static Connection getConn(){
Connection conn = null;
try{
conn = dataSource.getConnection();
}catch (SQLException e){
e.printStackTrace();
}
return conn;
}
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs!=null){
try {
//关闭存储查询结果的ResultSet对象
rs.close();
}catch (Exception e){
e.printStackTrace();
}
rs = null;
}
if (st!=null){
try {
st.close();
}catch (Exception e){
e.printStackTrace();
}
}
if (conn!=null){
try {
//将Connection连接对象还给数据库连接池
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
三.DBCP使用配置文件设置数据源参数
需要下载Commons-dbcp.jar和Commons-pool.jar
1.配置文件dbcpconfig.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/Dandelion?useUnicode=true&characterEncoding=utf-8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true
username=root
password=******
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=30000
connectionProperties=useUnicode=true;characterEncoding=UTF8
defaultAutoCommit=true
defaultTransactionIsolation=READ_UNCOMMITTED
2.读取数据源配置的JAVA代码
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* @ClassName:JdbcUtil
* @Description:数据库连接工具类
*/
public class JdbcUtil {
//数据库连接池需实现javax.sql.DataSource接口,DBCP连接池是javax.sql.DataSource接口的具体实现
private static DataSource ds = new BasicDataSource();
//使用静态代码块创建数据库连接池
static{
try{
//加载dbcpconfig.properties配置文件
InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("/src/dbcpconfig.properties");
Properties prop = new Properties();
prop.load(in);
log.info(prop.getProperty("password"));
log.info("开始创建数据源");
//创建数据源
ds = BasicDataSourceFactory.createDataSource(prop);
}catch (Exception e){
throw new ExceptionInInitializerError(e);
}
}
/**
* @Method:getConnection
* @Description:从数据源中获取数据库连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
//从数据源中获取数据库连接
return ds.getConnection();
}
/**
* @Method:release
* @Description:释放资源(数据库连接对象conn,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象)
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs!=null){
try {
//关闭存储查询结果的ResultSet对象
rs.close();
}catch (Exception e){
e.printStackTrace();
}
rs = null;
}
if (st!=null){
try {
st.close();
}catch (Exception e){
e.printStackTrace();
}
}
if (conn!=null){
try {
//将Connection连接对象还给数据库连接池
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
四.关于DBCP读取properties文件路径的说明
JAVA的Class.getClassLoader.getResourceAsStream(String path)中的path有带“/"和不带“/"两种写法
第一种:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二种:前面没有 “ / ”
代表当前类的目录
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
万丈红尘三杯酒,千秋大业一壶茶
网友评论