<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 配置这个属性的意义在于,如果存在多个数据源,监控的时候 可以通过名字来区分开来。如果没有配置,将会生成一个名字, 格式是:"DataSource-" 
+ System.identityHashCode(this) -->
<property name="name" value="datasource_db_nono" />
<!-- 基本属性 url、user、password -->
<property name="url" value="${pay.db.jdbcUrl}" />
<property name="username" value="${pay.db.username}" />
<property name="password" value="${pay.db.password}" />
 
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${pay.db.initialSize}" />
<property name="minIdle" value="${pay.db.minIdle}" />
<property name="maxActive" value="${pay.db.maxActive}" />
 
<!-- 获取连接时最大等待时间,单位毫秒。 配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁 -->
<property name="maxWait" value="${pay.db.maxWait}" />
<property name="useUnfairLock" value="true" />
<!-- Destroy线程会检测连接的间隔时间,单位是毫秒 testWhileIdle的判断依据 -->
<property name="timeBetweenEvictionRunsMillis" value="1700000" />
<!-- 连接不管是否空闲,存活phyTimeoutMillis后强制回收,用于Destroy线程清理连接的时候的检测时间 -->
<property name="phyTimeoutMillis" value="3600000" />
<!-- 连接的最小生存的时间,单位是毫秒, Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于 minEvictableIdleTimeMillis,则关闭当前连接。 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 连接的最大存活时间,如果连接的最大时间大于maxEvictableIdleTimeMillis,则无视最小连接数强制回收 -->
<property name="maxEvictableIdleTimeMillis" value="360000" />
<property name="validationQuery" value="SELECT 1" />
<!-- 申请连接的时候检测,如果连接的空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true" />
<!-- 是否缓存preparedStatement,也就是PSCache。 PSCache对支持游标的数据库性能提升巨大,比如说oracle。 
在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。 5.5及以上版本有PSCache,建议开启 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="100" />
<!-- 配置监控统计拦截的filters。状态统计:stat,日常记录:slf4j -->
<property name="filters" value="slf4j" />
<property name="proxyFilters">
<list>
<ref bean="stat-filter"/>
</list>
</property>
<!-- 针对properties中加密之后的密码进行解密 -->
<!-- <property name="passwordCallback" ref="passwordCallback"/> -->
<!-- 针对properties中加密之后的用户名进行解密 -->
<!-- <property name="userCallback" ref="userCallback"/> -->
<!-- <property name="connectionProperties" value=""></property> -->
<!-- 可用于检测是否有连接泄漏,生产环境不建议打开,仅用于测试环境进行验证 -->
<!-- 对于建立时间超过removeAbandonedTimeout的连接强制关闭 -->
<property name="removeAbandoned" value="false" />
<!-- 指定连接建立多长时间就需要被强制关闭 -->
<property name="removeAbandonedTimeout" value="300" />
<!-- 指定发生removeabandoned的时候,是否记录当前线程的堆栈信息到日志中 -->
<property name="logAbandoned" value="true" />
</bean>
<!-- <bean name="passwordCallback" class=""/> -->
<!-- <bean name="userCallback" class=""/> -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="10000" />
<property name="logSlowSql" value="true" />
<!-- https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter -->
<property name="mergeSql" value="true" />
<!-- 缺省多个DruidDataSource的监控数据是各自独立的,在Druid-0.2.17版本之后,支持配置公用监控数据,配置参数为useGloalDataSourceStat -->
<property name="useGlobalDataSourceStat" value="true" />
</bean>