1.添加maven配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.26</version>
</dependency>
2. 注掉原有的DBCP数据源配置,加上以下配置
<bean id="myDataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password-->
<property name="url"value="${mysql_url}" />
<property name="username"value="${mysql_username}" />
<property name="password"value="${mysql_password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize"value="100" />
<property name="minIdle"value="200" />
<property name="maxActive"value="2000" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait"value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<propertyname="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<propertyname="minEvictableIdleTimeMillis" value="300000" />
<propertyname="validationQuery" value="SELECT 'x'" />
<propertyname="testWhileIdle" value="true" />
<property name="testOnBorrow"value="false" />
<property name="testOnReturn"value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements"value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters"value="stat" />
</bean>
3.web.xml中添加以下内容
<!-- 添加支持 页面监控连接池 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- druid 阿里连接池 -->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上就配置好了,还是很简单的,然后打开监控页面
http://ip:port/项目名/druid/index.html
三.关于参数配置的解释:
1. 初始化时建立的物理连接个数,初始化发生在显示调用init方法,或者第一次getConnection时
<propertyname="initialSize" value="100" />
2. 最大连接池数量
<propertyname="maxActive" value="2000" />
3. 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
<propertyname="maxPoolPreparedStatementPerConnectionSize" value="20"/>
4. 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。
<propertyname="poolPreparedStatements" value="true" />
1.地址:
https://github.com/alibaba/druid/wiki/%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%AF%B9%E6%AF%94
2.测试执行申请归还连接1,000,000(一百万)次总耗时性能对比。
Testcase
Connection conn = dataSource.getConnection();
conn.close();
测试demo地址:
https://github.com/alibaba/druid/blob/master/src/test/java/com/alibaba/druid/benckmark/pool/Case1.java
private int initialSize = 10;
private int minPoolSize = 10;
private int maxPoolSize = 50;
private int maxActive = 50;
结论:
1. Druid是性能最好的数据库连接池,tomcat-jdbc和druid性能接近。
2. proxool在激烈并发时会抛异常,完全不靠谱。
3. c3p0和proxool都相当慢,慢到影响sql执行效率的地步。
4. bonecp性能并不优越,采用LinkedTransferQueue并没有能够获得性能提升。
5. 除了bonecp,其他的在JDK 7上跑得比JDK 6上快
6. jboss-datasource虽然稳定,但是性能很糟糕