DruidDataSource支持通过Filter-Chain模式进行扩展,类似Serlvet的Filter,扩展十分方便,你可以拦截任何JDBC的方法。

有两种配置Filter的方式,一种是配置filters属性,一种是配置proxyFilters属性。filters和proxyFilters的配置是组合关系,而不是替换关系。

配置filters属性

配置filters属性比较简单,filters的类型是字符串,多个filter使用逗号隔开。例如:

  1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  2. init-method="init" destroy-method="close">
  3. <property name="url" value="jdbc:derby:memory:spring-test;create=true" />
  4. <property name="initialSize" value="1" />
  5. <property name="maxActive" value="20" />
  6. <property name="filters" value="stat,log4j" />
  7. </bean>

filters属性的配置使用别名或者全类名,stat是com.alibaba.druid.filter.stat.StatFilter的别名。在这里https://github.com/alibaba/druid/wiki/%E5%86%85%E7%BD%AEFilter%E7%9A%84%E5%88%AB%E5%90%8D 查看内置Filter的别名。

配置proxyFilters属性

proxyFilters的类型是List,使用proxyFilters配置,可以有更多的配置选项。

  1. <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
  2. </bean>
  3. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  4. init-method="init" destroy-method="close">
  5. <property name="url" value="jdbc:derby:memory:spring-test;create=true" />
  6. <property name="initialSize" value="1" />
  7. <property name="maxActive" value="20" />
  8. <property name="proxyFilters">
  9. <list>
  10. <ref bean="stat-filter" />
  11. </list>
  12. </property>
  13. </bean>