一、引入jar包:druid-1.0.25.jar
官方下载地址:http://repo1.maven.org/maven2/com/alibaba/druid/
二、spring配置:applicationContext.xml
监控还是会耗内存的,性能测试完毕后,可取消配置
<!-- 注入数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close"> <!-- 当数据库连接不使用时,重新放回连接池 -->
<!-- Druid会根据url自动获取jdk下的数据库driver -->
<!-- <property name="driverClassName" value="${jdbc.driverClassName}" /> -->
<!-- 数据库连接基本属性 -->
<property name="url" value="${jdbc.url}" /> <!-- 数据库连接地址 -->
<property name="username" value="${jdbc.username}" /> <!-- 用户名 -->
<property name="password" value="${jdbc.password}" /> <!-- 密码 -->
<property name="initialSize" value="20" /> <!-- 初始连接数 -->
<property name="maxActive" value="100" /> <!-- 最大活动连接数 -->
<!-- 获取连接等待超时时间,设置后缺省启用公平锁,优先排队等待的进程,但影响并发效率(推荐) -->
<!-- 设置属性useUnfairLock为true使用非公平锁,可能导致一些排队线程永远无法处理 -->
<property name="maxWait" value="60000" />
<!-- <property name="maxIdle" value="30" /> --> <!-- 已取消,配置了不报错但是不生效 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 检测关闭空闲连接 -->
<property name="minEvictableIdleTimeMillis" value="300000" /> <!-- 连接最小生存时间 -->
<property name="validationQuery" value="SELECT 'x'" /> <!-- 检测连接是否有效 -->
<property name="testWhileIdle" value="true" /> <!-- 时间大于(timeBet...Millis)检测连接是否有效 -->
<property name="testOnBorrow" value="false" /> <!-- 申请连接时检测 -->
<property name="testOnReturn" value="false" /> <!-- 归还连接时检测 -->
<property name="poolPreparedStatements" value="true" /> <!-- PSCache 准备语句对象缓存-->
<!-- 每个连接上PSCache的大小 -->
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 监控统计拦截器,监控sql情况,well:防火墙,log4j:日志。均为合并关系 -->
<property name="filters" value="stat,wall" />
<!-- 合并sql,相同的sql合并统计。下文是实现方式之一,还可使用 proxyFilters 等 -->
<property name="connectionProperties" value="druid.stat.mergeSql=true" />
</bean>
<!-- spring 监控配置 -->
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
</bean>
<aop:config>
<aop:pointcut id="druid-stat-pointcut" expression="(execution(public * tf.eteller.service.*.*(..))) " />
<aop:advisor advice-ref="druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
</aop:config>
三、web.xml配置(仅为了监控)
1、拦截器配置
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<!-- 排除一些不需要监控的url -->
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
<!-- sessionStatMaxCount:缺省1000 -->
<init-param>
<param-name>sessionStatMaxCount</param-name>
<param-value>1000</param-value>
</init-param>
<!-- 配置profileEnable能够监控单个url调用的sql列表 -->
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
<!-- 让监控知道当前登录的用户 -->
<init-param>
<param-name>principalSessionName</param-name>
<param-value>session_user_key</param-value>
</init-param>
<!-- 关闭session统计功能
<init-param>
<param-name>sessionStatEnable</param-name>
<param-value>true</param-value>
</init-param> -->
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、监控servlet配置
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<!-- 指定允许,或拒绝访问监控页面的IP -->
<!--deny:拒绝,allow:允许。deny优先于allow,allow没有配置或者为空,则允许所有人访问-->
<init-param>
<param-name>allow</param-name>
<param-value>2.2.2.2/24,3.3.3.3</param-value>
</init-param>
<init-param>
<param-name>deny</param-name>
<param-value>1.1.1.1</param-value>
</init-param>
<!-- 监控页面登陆的用户名和密码,不设置即可直接登陆 -->
<init-param>
<param-name>loginUsername</param-name>
<param-value>druid</param-value>
</init-param>
<init-param>
<param-name>loginPassword</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>