Druid入门
Maven仓库地址
com.alibaba druid 1.1.6
手动获取连接
public class Driud { private static DruidDataSource druidDataSource = null; //在类加载时进行初始化 static { Properties properties = new Properties(); try { properties.load(Driud.class.getResourceAsStream("/druid.properties")); druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return druidDataSource.getConnection(); }}
配置信息
总体配置
name=testdriverClassName = com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassword=overdoseinitialSize=5maxActive=10minIdle=3maxWait=60000removeAbandoned=trueremoveAbandonedTimeout=180timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000validationQuery=SELECT 1testWhileIdle=truetestOnBorrow=falsetestOnReturn=falsepoolPreparedStatements=truemaxPoolPreparedStatementPerConnectionSize=50filters=stat
单个配置
配置 | 缺省值 | 解释 |
---|---|---|
name | 当存在多个数据源时, 通过名字区分 | |
url | 连接数据库的Url <br/> mysql: jdbc:mysql://localhost:3306/test <br/> oracle : jdbc:oracle:thin:@localhost:1521:ocnauto | |
username | 连接数据库的用户名 | |
password | 连接数据库的密码 | |
driverClassName | 根据url自动识别 | 可选的配置 druid会自动根据url选择对应的驱动 |
initialSize | 0 | 初始化时创建连接的个数 |
maxActive | 8 | 最大连接池数量 |
没用 详见 | ||
minIdle | 最小连接池数量 | |
maxWait | 获取连接时最大等待时间, 单位为毫秒, 缺省为公平锁 | |
poolPreparedStatements | 是否缓存preparedStatement, 也就是PSCache | |
maxPoolPreparedStatementPerConnectionSize | -1 | 每个连接上PSCache的大小 |
validationQuery | 用来检测连接是否有效的sql,要求是一个查询语句。 | |
testOnBorrow | true | 申请连接时执行validationQuery检测连接是否有效 |
testOnReturn | false | 归还连接时执行validationQuery检测连接是否有效 |
testWhileIdle | false | 建议配置为true,不影响性能,并且保证安全性 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 |
timeBetweenEvictionRunsMillis | 间隔多久进行一次检测, 检测需要关闭的空闲连接, 单位为毫秒 | |
minEvictableIdleTimeMillis | 一个连接在池中最小生存的时间,单位是毫秒 | |
connectionInitSqls | 连接初始化的时候执行的sql | |
exceptionSorter | 根据dbType自动识别 | 数据库抛出一些不可恢复的异常时,抛弃连接 |
filters | 通过别名的方式配置扩展插件 |
连接池原理
连接池初始化时创建initialSize个连接, 取出连接时, 先判断有无空闲连接, 如果有空闲连接则返回, 否则再判断当前连接池是否等于maxActive, 如果等于maxActive, 则最多等待maxWait时间, 如果中途有连接被释放则返回, 否则抛出异常. 如果不等于maxActive则建立一个新连接. 连接使用完毕后, 并不将其关闭, 而是放回连接池, 等待下一次获取, 当连接池连接数目小于minIdle, 则自动补充连接