Java使用dbcp数据库连接池_JAVA使用DBCP2(数据库连接池)

一.准备工作

需要下载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");

万丈红尘三杯酒,千秋大业一壶茶

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值