DBCP连接池

建立数据库连接是一个非常耗时耗资源的行为,通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

有两个需要的jar包:commons-dbcp.jar,commons-pool.jar

先创建配置文件(dbcp.properties),直接放到src下

driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
url = jdbc:sqlserver://127.0.0.1:1433;DatabaseName=XSGL
username = sa
password = ******

initialSize = 1
maxActive = 20
minIdle = 5
maxIdle = 8
maxWait = 60000


#initialSize :连接池启动时创建的初始化连接数量(默认值为0)
#maxActive :连接池中可同时连接的最大的连接数(默认值为8,高峰单机器在20并发左右,自己根据应用场景定)
#maxIdle:连接池中最大的空闲的连接数,超过的空闲连接数的连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为在高负载的情况下,连接的打开时间比关闭的时间快,引起连接池中idle的个数上升超过maxIdle,而造成频繁的连接销毁和创建)
#minIdle:连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建高于minIdle个数的连接)
#maxWait  :最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,避免因线程池不够用,而导致请求被无限制挂起)

定义一个dbcp的工具类

package hhuc.dbcpsqlconnection;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/*
 * author:Cenhelm
 * dbcp工具类获取数据源连接
 */

public class DbcpUtils {

	private static DataSource ds = null;
	private DbcpUtils() {}
	static {
		try {
			//获得配置文件路径
			InputStream is = DbcpUtils.class.getClassLoader().getResourceAsStream("dbcp.properties");
			//加载配置文件
			Properties props = new Properties();
			props.load(is);
			//创建数据源对象
			ds = BasicDataSourceFactory.createDataSource(props);
			//关闭输入流
			is.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}
	
	public static void close(ResultSet rs, Statement st, Connection conn) {
		try {
			rs.close();
			st.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
}

在创建数据库连接时稍有不同,调用数据源的getConnection()方法,因为静态语句块已经加载过配置文件

Connection conn = DbcpUtils.getConnection();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值