DBCP 连接池(含代码)、BasicDataSource 配置参数 中文版

当使用BDCP 连接的时候 出现一下错误时:

Caused By: java.lang.ClassNotFoundException: Class bytes found but defineClass()failed for: 'org.apache.commons.dbcp2.BasicDataSource'

Caused By: java.lang.UnsupportedClassVersionError: org/apache/commons/dbcp2/BasicDataSource : Unsupported major.minor version 52.0

 

表示 jdk 版本 不对应 BasicDataSource 所在的版本版本 ,下载 相对应版本即可, 地址:

http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

附上:DBCP 连接池代码

用到的类:

  1. 需在工程内导入一下jar包

commons-collections4-4.0.jar

commons-dbcp-1.4.jar

commons-pool-1.6.jar

  1. BasicDataSource 这是需要创建的dbcp连接池对象
  2. ThreadLoacl 这个类可以以键值对的方式保存当前线程及连接。
  3. Properties 配置文件所需要用到的类,加载输入流后可以读取配置文件信息。

 

源代码:

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

import org.apache.commons.dbcp.BasicDataSource;

public class DBUtil2 {

		private DBUtil2() {

		}
		private static BasicDataSource  bds = null;
		
		private static ThreadLocal<Connection> tl = null;
		
		//使用静态代码块在程序启动的时候就初始化
		static {
				try {
			//创建配置文件对象
			Properties prop = new Properties();
			
			//创建流对象
			InputStream is = DBUtil2.class.getClassLoader().getResourceAsStream("com_huang_JDBC_04/config.properties.txt");
			
			//将配置文件加载到流对象中
			prop.load(is);
			
			//加载完成,关闭流对象
			is.close();
			
			//获取配置文件内的值
			String driver = prop.getProperty("driver");
			String url = prop.getProperty("url");
			String user = prop.getProperty("user");
			String pwd = prop.getProperty("pwd");
			int initsize = Integer.parseInt(prop.getProperty("initsize"));
			int maxactive = Integer.parseInt(prop.getProperty("maxactive"));
			int maxwait = Integer.parseInt(prop.getProperty("maxwait"));
			int maxidle = Integer.parseInt(prop.getProperty("maxidle"));
			int minidle = Integer.parseInt(prop.getProperty("minidle"));
			
			//创建数据库连接池
			 bds = new BasicDataSource();
			
			bds.setDriverClassName(driver);
			
			bds.setUrl(url);
			
			bds.setUsername(user);
			
			bds.setPassword(pwd);
			
			bds.setInitialSize(initsize);
			
			bds.setMaxActive(maxactive);
			
			bds.setMaxWait(maxwait);
			
			bds.setMaxIdle(maxidle);
			
			bds.setMinIdle(minidle);
			
			 tl = new ThreadLocal<Connection>();
			
				}catch(IOException e) {
					e.printStackTrace();
				}
		
		}
	public static Connection getConnection() {
		/*
		 * 需要从数据库连接池返回一个连接给调用者
		 */
		Connection conn = null;
		try {
		 conn = bds.getConnection();
		 
		 tl.set(conn);
		 
		}catch(SQLException s) {
			s.printStackTrace();
		}
		return conn;
		
	}
	
	public static void closeConncetion() {
		
		Connection conn =  tl.get();
		
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

 

附上:配置详情(对应最新版)
 

BasicDataSource Configuration 配置参数 中文版

ParameterDescripton
username用来建立jdbc连接的用户名
password用来建立jdbc连接的密码
url建立连接的url
driverClassNamejdbc driver className
connectionProperties连接使用的properties.使用的格式必须是[propertyName=property;]*

properties配置:

ParameterdefaultDescription
defaultAutoCommitdriver default这个连接池默认的自动提交状态.如果没有设置,setAutoCommit方法不会被调用
defaultReadOnlydriver default这个连接池默认的读写状态。如果没有设置,setReadOnly方法就不会调用(一些数据库不支持readOnly模式,比如informix)
defaultTransactionIsolationdriver default默认的隔离级别.必须是其中一个(NONE,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,SERIALIZABLE)
defaultCatalog 连接池默认创建的连接数
cacheStatetrue如果是true, 连接池将会缓存readOnly和auto Commit配置,在第一次进行读或者写的时候.这会减少以后的数据库查询.如果获取连接后,这个连接自己设置readOnly和自动提交设置,这些配置不会影响到当前中的配置。在这种情况下,如果我们想要这种设置生效,caching应该把这个设置成disable.
defaultQueryTimeoutnull如果不是null,这个Integer的value将会用来衡量timeout,从连接创建时就开始计算。null意味着driver default将会被使用.
enableAutocommitOnReturntrue如果是true,连接如果返回到池的时候,将会检查是否被设置成了autoAutoCommit为false,那么就会调用Connection.setAutoCommit(true)
roolbackOnReturntrueTrue意味着如果设置了autoCommit为false和readonly胃false的时候,当回到连接池的时候就回滚

ParameterDefaultDescription
initialSize0连接池创建的时候,建立的连接数.从1.2起
maxTotal8一个时间最大的活跃连接数,负数代表没有上限
maxIdle8最大的idle保持数,其他的将会释放,负数代表没有上限
minIdle0最小的idle保持数,其他的将会被创建,0代表不保持
maxWaitMillisindefinitely获取连接最大等待时间,-1代表一直等

ParameterDefaultDescription
validationQuery 在返回连接前,是否进行验证。如果使用,必须使用一个SQL SELECT返回至少一行.如果没有配置,连接调用isValid()方法.
validationQueryTimeoutno timeout连接验证超时的秒数,如果设置为正数,将会用来验证连接的sql执行
testOnCreatefalse在连接创建时,是否进行验证。如果验证失败,从连接池获取就会失败.
testOnBorrowtrue在从池中借连接的时候是否验证。如果验证失败,就会放弃这个连接,试图获取另外一个.
testOnReturntrue在返回连接给连接池的时候,是否进行验证.
testWhileIdlefalse空闲连接是否进行验证,如果失败,就会从连接池去除.
timeBetweenEvictionRunsMillis-1空闲连接验证执行的时间间隔,负数将会代表不会执行
numTestsPerEvictionRun3执行空闲连接验证的线程数.
minEvictableIdleTimeMillis1000 * 60 * 30空闲保持时间,在这时间之后再进行空闲验证
softMinEvictableIdleTimeMillis-1这个是空闲保持时间的软限制,如果设置最小空闲保持时间(这时候不考虑需要保持空闲连接数),则先和最小空闲保持时间对比,再和这个参数比。
maxConnLifetimeMillis-1连接最大的生命时间。如果超过了这个时间,那么在下次活跃,不活跃或者验证测试的时候就会失败。0或者小于0代表连接没有生命上限
logExpiredConnectionstrue是否记录超时的连接数
connectionInitSqlsnull建立连接的时候调用的sql,只有在connection fatory创建的时候调用
lifotrue这个一个队列模式lifo(last in first out)。如果设置为false,则为FIFO

ParameterDefaultDescription
accessToUnderlyingConnectionAllowedfalse是否可以PoolGuard可以获取底层连接
removeAbandonedOnMaintenance removeAbandonedOnBorrowfalse这个是用来保证应用程序关闭连接失败的情况。在超时不使用并且超过抛弃时间后就会被抛弃掉。条件超时,还有其他条件:getNumActive() > getMaxTotal() - 3; and getNumIdle() < 2
removeAbandonedTimeout300抛弃的时间
logAbandonedfalse是否记录abandoned的日志
abandonedUsageTrackingfalse是否记录trace,debug的时候比较有用
fastFailValidationfalse这个设置为true的时候,validation快速失败当connection抛出fatal SqlException的时候。当对一个已经关闭的连接发出isValid方法和一个合法query的时候,就会快速失败.SQL_STATE默认是:(57P01 (ADMIN SHUTDOWN) 57P02 (CRASH SHUTDOWN) 57P03 (CANNOT CONNECT NOW) 01002 (SQL92 disconnect error) JZ0C0 (Sybase disconnect error) JZ0C1 (Sybase disconnect error) Any SQL_STATE code that starts with “08”) 可以通过设置disconnectionSqlCodes属性进行override
disconnectionSqlCodesnull配合fastValidation使用,用来设置需要包括的sql_state
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值