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>