Druid 配置_StatFilter


Druid內置提供一個StatFilter,用於統計監控信息。

1. 別名配置

StatFilter的別名是stat,這個別名映射配置信息保存在druid-xxx.jar!/META-INF/druid-filter.properties。

在spring中使用別名配置方式如下:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="stat" />
  </bean>

2. 組合配置

StatFilter可以和其他的Filter配置使用,比如:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="stat,log4j" />
  </bean>

在上面的配置中,StatFilter和Log4jFilter組合使用。

3. 通過proxyFilters屬性配置

別名配置是通過filters屬性配置的,filters屬性的類型是String。如果需要通過bean的方式配置,使用proxyFilters屬性。

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="slowSqlMillis" value="10000" />
    <property name="logSlowSql" value="true" />
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="log4j" />
    <property name="proxyFilters">
        <list>
            <ref bean="stat-filter" />
        </list>
    </property>
</bean>

其中filters和proxyFilters屬性是組合關系的,不是替換的,在上面的配置中,dataSource有了兩個Filter,StatFilter和Log4jFilter。

4. SQL合並配置

當你程序中存在沒有參數化的sql執行時,sql統計的效果會不好。比如:

select * from t where id = 1
select * from t where id = 2
select * from t where id = 3

在統計中,顯示為3條sql,這不是我們希望要的效果。StatFilter提供合並的功能,能夠將這3個SQL合並為如下的SQL

select * from t where id = ?

配置StatFilter的mergeSql屬性

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="mergeSql" value="true" />
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    init-method="init" destroy-method="close">
    ... ...
    <property name="proxyFilters">
        <list>
            <ref bean="stat-filter" />
        </list>
    </property>
</bean>

StatFilter支持一種簡化配置方式,和上面的配置等同的。如下:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="mergeStat" />
  </bean>

mergeStat是的MergeStatFilter縮寫,我們看MergeStatFilter的實現:

  public class MergeStatFilter extends StatFilter {
    public MergeStatFilter() {
        super.setMergeSql(true);
    }
  }

從實現代碼來看,僅僅是一個mergeSql的缺省值。

也可以通過connectProperties屬性來打開mergeSql功能,例如:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="stat" />
    <property name="connectionProperties" value="druid.stat.mergeSql=true" />
  </bean>

或者通過增加JVM的參數配置:

-Ddruid.stat.mergeSql=true

4.1 合並SQL對tddl的支持

在druid-0.2.17版本之后,sql合並支持tddl,能夠對分表進行合並。

5. 慢SQL記錄

StatFilter屬性slowSqlMillis用來配置SQL慢的標准,執行時間超過slowSqlMillis的就是慢。slowSqlMillis的缺省值為3000,也就是3秒。

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="slowSqlMillis" value="10000" />
    <property name="logSlowSql" value="true" />
</bean>

在上面的配置中,slowSqlMillis被修改為10秒,並且通過日志輸出執行慢的SQL。

slowSqlMillis屬性也可以通過connectProperties來配置,例如:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="filters" value="stat" />
    <property name="connectionProperties" value="druid.stat.slowSqlMillis=5000" />
  </bean>

6. 合並多個DruidDataSource的監控數據

缺省多個DruidDataSource的監控數據是各自獨立的,在Druid-0.2.17版本之后,支持配置公用監控數據,配置參數為useGloalDataSourceStat。例如:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ... ...
    <property name="useGlobalDataSourceStat" value="true" />
  </bean>

或者通過jvm啟動參數來指定,例如:

  -Ddruid.useGlobalDataSourceStat=true

全部使用jvm啟動參數來配置,可以這樣:

  -Ddruid.filters=mergeStat -Ddruid.useGlobalDataSourceStat=true


https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM