c3p0,dbcp與druid 三大連接池的區別
數據庫連接池有很多選擇,c3p、dhcp、proxool等,druid作爲一名後起之秀
可以看https://blog.csdn.net/qq_34359363/article/details/72763491
druid鏈接池
阿里出品,淘寶和支付寶專用數據庫連接池,但它不僅僅是一個數據庫連接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個 SQL Parser。支持所有JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid針對Oracle和MySql做了特別優化,比如Oracle的PS
Cache內存佔用優化,MySql的ping檢測優化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,這是一個手寫的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象語法樹很方便。簡單SQL語句用時10微秒以內,複雜SQL用時30微秒。通過Druid提供的SQL Parser可以在JDBC層攔截SQL做相應處理,比如說分庫分表、審計等。Druid防禦SQL注入攻擊的WallFilter就是通過Druid的SQL Parser分析語義實現的。
druid的實現方式
pom.xml文件
<!-- 阿里數據庫連接池 下載地址http://www.mvnrepository.com/artifact/com.alibaba/druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
applicationContext.xml
<!-- 指定數據源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 連接驅動 -->
<property name="driverClassName" value="${dataSource.driverClass}"/>
<property name="url" value="${dataSource.jdbcUrl}"/>
<property name="username" value="${dataSource.user}"/>
<property name="password" value="${dataSource.password}"/>
<property name="filters" value="stat" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${cpool.initialSize}" />
<property name="maxActive" value="${cpool.maxActive}" />
<property name="minIdle" value="${cpool.minIdle}" />
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="${cpool.maxWait}" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${cpool.timeBetweenEvictionRunsMillis}" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${cpool.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打開PSCache,並且指定每個連接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="${cpool.maxPoolPreparedStatementPerConnectionSize}" />
</bean>
jdbc.properties
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/recycling_treasure?characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull
dataSource.user=root
dataSource.password=root
###----------------- druid 鏈接池 -------------
cpool.initialSize=3
#配置初始化大小、最小、最大
cpool.minIdle=3
cpool.maxActive=20
#配置獲取連接等待超時的時間
cpool.maxWait = 60000
#配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
cpool.timeBetweenEvictionRunsMillis =60000
#配置一個連接在池中最小生存的時間,單位是毫秒
cpool.minEvictableIdleTimeMillis = 300000
cpool.maxPoolPreparedStatementPerConnectionSize = 50