一:介绍
https://github.com/alibaba/druid/wiki/%E9%A6%96%E9%A1%B5
二:比较
druid是类似dbcp,c3p0的一个数据库连接池框架,性能比这两者好,同时自带监控页面,可以实时监控应用的连接池情况以及其中性能差的sql,方便我们找出应用中连接池方面的问题,多的就不说了,详细的介绍,github上都有
三:实战
我自己用druid结合mybatis写了一个demo,话不多说,上代码,o(╯□╰)o
先看spring配置
<!-- 德鲁伊配置数据连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}"/>
<property name="password" value="${jdbc_password}" />
<property name="maxActive" value="${maxActive}" />
<!-- filters:统计监控信息,value是一个string,支持组合配置,如stat,log4j,那么问题来了,如果自定义的filter该如何配置呢,可以通过bean的形式添加 -->
<!-- <property name="filters" value="${filters}" /> -->
<property name="proxyFilters">
<list>
<ref bean="stat-filter"/>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="classpath:com/dingwang/mapping/*Mapper.xml"></property>
</bean>
<!-- druid监控统计bean 对应上文dataSource中的proxyFilters -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="1000" />
<property name="logSlowSql" value="true" />
</bean>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<!-- 展示监控页面的servlet -->
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 允许访问监控界面的IP -->
<param-name>allow</param-name>
<param-value>128.242.127.1/24,128.242.128.1</param-value>
</init-param>
<init-param>
<!-- 不允许访问监控界面的IP,优先级高于allow配置 -->
<param-name>deny</param-name>
<param-value>10.139.162.231</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
测试案例:
/**
* 类SqlBean.java的实现描述:TODO 类实现描述
*
* @author wangding_91@163.com 2016年1月14日 下午5:43:35
*/
public class SqlBean {
private static final Logger log = LoggerFactory.getLogger(SqlBean.class);
@Resource
private PolicyDTOMapper policyDAO;
private Runnable runner;
public void init() {
runner = new Runnable() {
public void run() {
while (true) {
PolicyDTO dto = new PolicyDTO();
dto = SqlBean.this.policyDAO.selectByPrimaryKey(5l);
log.info(dto.toString());
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
log.info("---------------start SqlBean-------------");
Thread t = new Thread(runner);
t.start();
}
}
四:效果图
五:源码下载:
https://github.com/dingwang/DruidWeb