Druid入门
Maven仓库地址
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
手动获取连接
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=test
driverClassName = com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=overdose
initialSize=5
maxActive=10
minIdle=3
maxWait=60000
removeAbandoned=true
removeAbandonedTimeout=180
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=true
maxPoolPreparedStatementPerConnectionSize=50
filters=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 | 最大连接池数量 |
没用 详见Druid常见问题 | ||
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, 则自动补充连接
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。