DruidDataSource支持通过Filter-Chain模式进行扩展,类似Serlvet的Filter,扩展十分方便,你可以拦截任何JDBC的方法。
有两种配置Filter的方式,一种是配置filters属性,一种是配置proxyFilters属性。filters和proxyFilters的配置是组合关系,而不是替换关系。
配置filters属性
配置filters属性比较简单,filters的类型是字符串,多个filter使用逗号隔开。例如:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="jdbc:derby:memory:spring-test;create=true" />
<property name="initialSize" value="1" />
<property name="maxActive" value="20" />
<property name="filters" value="stat,log4j" />
</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配置,可以有更多的配置选项。
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="jdbc:derby:memory:spring-test;create=true" />
<property name="initialSize" value="1" />
<property name="maxActive" value="20" />
<property name="proxyFilters">
<list>
<ref bean="stat-filter" />
</list>
</property>
</bean>