Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
1. DruidDataSource配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<!-- 配置监控统计拦截的filters, 监控统计:"stat",防SQL注入:"wall",组合使用: "stat,wall" -->
<property name="filters" value="stat" />
<!-- 配置初始化连接数、最大连接数、最小连接数 -->
<property name="initialSize" value="1" />
<property name="maxActive" value="20" />
<property name="minIdle" value="1" />
<!-- 最大等待时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
空闲时间-->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!--是否超时检测-->
<property name="testWhileIdle" value="true" />
<!--申请连接检测-->
<property name="testOnBorrow" value="false" />
<!--归还连接检测-->
<property name="testOnReturn" value="false" />
<!-- 开启缓存功能-->
<property name="poolPreparedStatements" value="true" />
<!--单个连接拥有的最大缓存数-->
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
- 在上面的配置中,通常你需要配置url、username、password,maxActive这三项。
- Druid会自动跟url识别驱动类名,如果连接的数据库非常见数据库,配置属性driverClassName
- asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间
2. DRUID 属性说明表
3. c3p0、dbcp、druid三大连接池的区别
4. 数据库连接池原理
传统方式:
当有多个线程,每个线程都需要连接数据库执行SQL语句的话,那么每个线程都会创建一个连接,并且在使用完毕后,关闭连接。
创建连接和关闭连接的过程也是比较消耗时间的,当多线程并发的时候,系统就会变得很卡顿。
同时,一个数据库同时支持的连接总数也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗光,后续线程发起的数据库连接就会失败。
使用连接池:
与传统方式不同,连接池在使用之前,就会创建好一定数量的连接。
如果有任何线程需要使用连接,那么就从连接池里面借用,而不是自己重新创建.
使用完毕后,又把这个连接归还给连接池供下一次或者其他线程使用。
倘若发生多线程并发情况,连接池里的连接被借用光了,那么其他线程就会临时等待,直到有连接被归还回来,再继续使用。
整个过程,这些连接都不会被关闭,而是不断的被循环使用,从而节约了启动和关闭连接的时间。
注:
参考:
c3p0,DBPC,Druid三大连接池的区别/性能【面试+工作】