最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

druid升級后sql監(jiān)控頁面為空白的解決

 更新時間:2021年06月19日 10:39:37   作者:靜夜的DD  
這篇文章主要介紹了druid升級后sql監(jiān)控頁面為空白的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

druid升級后sql監(jiān)控頁面為空白

說明

springboot項目,集成druid,之前版本是1.1.10,后來直接升級成1.1.22

出現(xiàn)問題

sql監(jiān)控為空:

sql監(jiān)控為空

數(shù)據(jù)源filter也為空:

解決過程

網(wǎng)上查詢得知,filter類名應為com.alibaba.druid.filter.stat.StatFilter。

借助ide,找到了stat過濾器加載的關鍵信息。

在com.alibaba.druid.spring.boot.autoconfigure.stat.DruidFilterConfiguration配置類中,如下:

stat加載配置

FILTER_STAT_PREFIX值為spring.datasource.druid.filter.stat

FILTER_STAT_PREFIX值

只有配置文件application.yml中有此配置項才會加載stat過濾器

部分druid配置項截圖(數(shù)據(jù)源配置省略):

在這里插入圖片描述

配置上此選項即可看到監(jiān)控!

使用druid監(jiān)控sql執(zhí)行狀態(tài)

使用Druid的連接池替換掉原來的C3P0連接池,然后配置Druid的相關屬性,完成對Spring web工程的JDBC監(jiān)控。

其實,我采用Druid替換其它連接池,最關鍵的一個理由是Druid有對SQL執(zhí)行的監(jiān)控統(tǒng)計功能。 :)

本文就是來看看看Druid的監(jiān)控功能。~~~ 一起玩起來 : )

Druid介紹

Druid是一個JDBC組件庫,包括數(shù)據(jù)庫連接池、SQL Parser等組件。DruidDataSource是最好的數(shù)據(jù)庫連接池。參考Druid wiki上的文章 <<各連接池的性能比較>>

Druild包獲取

Maven工程中添加druid依賴包:

  <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.0.26</version>
  </dependency>

Druid使用

替換C3P0連接池

Web工程原先采用C3P0連接池的配置:

 <!-- 配置數(shù)據(jù)源-C3PO -->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <property name="driverClass" value="${jdbc.driverClassName}" />
  <property name="jdbcUrl" value="${jdbc.url}" />
  <property name="user" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <property name="autoCommitOnClose" value="false" />
  <property name="maxIdleTime" value="${cpool.maxIdleTime}" />
  <property name="checkoutTimeout" value="${cpool.checkoutTimeout}" />
  <property name="initialPoolSize" value="${cpool.minPoolSize}" />
  <property name="minPoolSize" value="${cpool.minPoolSize}" />
  <property name="maxPoolSize" value="${cpool.maxPoolSize}" />
  <property name="acquireIncrement" value="${cpool.acquireIncrement}" />
  <property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}" />
 </bean>

改成Druid連接池DruidDataSource

 <!-- 配置數(shù)據(jù)源-druid -->
 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  destroy-method="close">
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <property name="maxActive" value="20" />
  <property name="initialSize" value="1" />
  <property name="maxWait" value="60000" />
  <property name="minIdle" value="1" />
  <property name="timeBetweenEvictionRunsMillis" value="60000" />
  <property name="minEvictableIdleTimeMillis" value="300000" />
  <property name="testWhileIdle" value="true" />
  <property name="testOnBorrow" value="false" />
  <property name="testOnReturn" value="false" />
  <property name="poolPreparedStatements" value="true" />
  <property name="maxOpenPreparedStatements" value="20" />
 </bean>

StatViewServlet配置

Druid內置提供了一個StatViewServlet用于展示Druid的統(tǒng)計信息。

這個StatViewServlet的用途包括:

  • 提供監(jiān)控信息展示的html頁面
  • 提供監(jiān)控信息的JSON API

StatViewServlet是一個標準的javax.servlet.http.HttpServlet,需要配置在你web應用中的WEB-INF/web.xml中。

 <servlet>
  <servlet-name>DruidStatView</servlet-name>
  <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DruidStatView</servlet-name>
  <url-pattern>/druid/*</url-pattern>
 </servlet-mapping>

配置完之后,可以通過如下格式的地址在瀏覽器訪問查看。

http:/<host>:<port>/<context>/druid

舉個例子:

如果host為localhost,port為8080,context為Demo,那么,可以通過如下URL訪問。

http://localhost:8080/Demo/druid

那么問題來了

查看的時候,能否提供用戶名和密碼作為驗證呢,而不是直接就能看JDBC執(zhí)行的狀態(tài)信息?

答案是肯定的。

需要在上述配置的情況下,配置Servlet的 loginUsername 和 loginPassword這兩個初始參數(shù)。

如:

	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
	  <init-param>  
   		 <!-- 用戶名 -->  
    	 <param-name>loginUsername</param-name>  
   		 <param-value>druid</param-value>  
   	  </init-param>  
      <init-param>  
   	    <!-- 密碼 -->  
    	<param-name>loginPassword</param-name>  
    	<param-value>druid</param-value>  
      </init-param>  
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>

配置好之后,登錄之后才能訪問。

StatFilter配置

Druid內置提供一個StatFilter,用于統(tǒng)計監(jiān)控信息。

如果沒有配置StatFilter,那么,我們無法獲取相關統(tǒng)計信息。

比如:

無法看到SQL監(jiān)控TAB上的數(shù)據(jù)。

URI監(jiān)控TAB中,無法獲取JDBC相關的SQL執(zhí)行信息。

如何展示出這些數(shù)據(jù)呢? 解決的辦法就是配置StatFilter。

StatFilter的別名是stat,在spring中使用別名配置方式如下:

<property name="filters" value="stat" />

將上述stat添加到dataSource中去即可。

	<!-- 配置數(shù)據(jù)源-druid -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="filters" value="stat" />
		<property name="maxActive" value="20" />
		<property name="initialSize" value="1" />
		<property name="maxWait" value="60000" />
		<property name="minIdle" value="1" />
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="poolPreparedStatements" value="true" />
		<property name="maxOpenPreparedStatements" value="20" />
	</bean>

添加完畢之后,再來看一下上述兩個TAB ( SQL監(jiān)控以及 URI監(jiān)控)下JDBC的內容:

在SQL監(jiān)控頁面,可以很清楚地看到目前執(zhí)行SQL的具體情況,包括某條SQL語句執(zhí)行的時間(平均、最慢)、SQL執(zhí)行次數(shù)、SQL執(zhí)行出錯的次數(shù)等。這些信息,可以作為系統(tǒng)SQL語句優(yōu)化的一個指標。

在URI監(jiān)控頁,可以清楚地看到執(zhí)行某個動作,關聯(lián)SQL有多少,請求次數(shù)、執(zhí)行時間、并發(fā)數(shù)等信息。

StatFilter可以和其他的Filter配置使用,比如, 與log4j組合使用。

<property name="filters" value="stat,log4j" />

這樣,我們在點擊 “記錄日志并重置” 的按鈕時,Console中就會輸入JDBC相關日志,日志采用JSON的方式記錄,如:

[INFO ][2016-11-15 20:11:11,677] com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl.log(DruidDataSourceStatLoggerImpl.java:77) - 
{"url":"jdbc:mysql://127.0.0.1:3306/Demo?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull","dbType":"mysql","name":"DataSource-958465974","activeCount":0,"poolingCount":1,"connectCount":0,"closeCount":0}

內置Filter別名和對應的Filter類名如下:

別名 Filter類名
default com.alibaba.druid.filter.stat.StatFilter
stat com.alibaba.druid.filter.stat.StatFilter
mergeStat com.alibaba.druid.filter.stat.MergeStatFilter
encoding com.alibaba.druid.filter.encoding.EncodingConvertFilter
log4j com.alibaba.druid.filter.logging.Log4jFilter
log4j2 com.alibaba.druid.filter.logging.Log4j2Filter
slf4j com.alibaba.druid.filter.logging.Slf4jLogFilter
commonlogging com.alibaba.druid.filter.logging.CommonsLogFilter

慢SQL記錄

StatFilter屬性slowSqlMillis用來配置SQL慢的標準,執(zhí)行時間超過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秒,并且通過日志輸出執(zhí)行慢的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>

Wallfilter配置

配置WallFilter,可以起到攔截作用,從而形成SQL的白名單和黑名單。

缺省情況下,配置裝載的目錄如下:

數(shù)據(jù)庫類型 目錄
mysql META-INF/druid/wall/mysql
oracle META-INF/druid/wall/oracle
sqlserver META-INF/druid/wall/sqlserver
postgres META-INF/druid/wall/postgres

從配置目錄中以下文件中讀取配置:

  deny-variant.txt
  deny-schema.txt
  deny-function.txt
  permit-variant.txt
  permit-variant.txt

指定配置裝載的目錄是可以指定,例如:

  <bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig" init-method="init">
      <!-- 指定配置裝載的目錄  -->
      <property name="dir" value="META-INF/druid/wall/mysql" />
  </bean>
 
  <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
      <property name="dbType" value="mysql" />
      <property name="config" ref="wall-filter-config" />
  </bean>
 
  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="proxyFilters">
          <list>
              <ref bean="wall-filter"/>
          </list>
      </property>
  </bean>

本文實例中,采用如下的配置:

	<bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig"
		init-method="init">
		<!-- 指定配置裝載的目錄 -->
		<property name="dir" value="META-INF/druid/wall/mysql" />
	</bean>
 
	<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
		<property name="dbType" value="mysql" />
		<property name="config" ref="wall-filter-config" />
	</bean>
 
	<!-- 配置數(shù)據(jù)源-druid -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="filters" value="stat" />
		<property name="maxActive" value="20" />
		<property name="initialSize" value="1" />
		<property name="maxWait" value="60000" />
		<property name="minIdle" value="1" />
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<property name="poolPreparedStatements" value="true" />
		<property name="maxOpenPreparedStatements" value="20" />
		<property name="proxyFilters">
			<list>
				<ref bean="wall-filter" />
			</list>
		</property>
	</bean>

配置好Wallfilter, 我們就可以看到SQL防火墻 TAB下的內容了。

因為是默認狀態(tài),沒有配置任何攔截的屬性信息,所以,SQL的執(zhí)行都在白名單中展示出來了。

配置Spring和jdbc的關聯(lián)

最后,還有一個Tab的內容沒有展示,那就是Spring監(jiān)控。

Druid提供了Spring和Jdbc的關聯(lián)監(jiān)控。

本文在Spring的applicationContext.xml配置文件中配置如下信息,支持方法名的攔截。

	<bean id="druid-stat-interceptor"
		class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
	</bean>
 
	<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
		scope="prototype">
		<property name="patterns">
			<list>
				<value>com.demo.mybatis.auto.*</value>
				<value>com.demo.mybatis.manual.*</value>
			</list>
		</property>
	</bean>
	<aop:config>
		<aop:advisor advice-ref="druid-stat-interceptor"
			pointcut-ref="druid-stat-pointcut" />
	</aop:config>

完工后,我們再去看一下,Spring監(jiān)控的TAB內容,就可以看到相關的MyBatis Mapper執(zhí)行信息。

在Spring監(jiān)控頁,可以顯示相關DAO執(zhí)行的方法,方法執(zhí)行的次數(shù)、執(zhí)行的時間等信息。

小結

通過上述幾個部分的配置,監(jiān)控頁面上所有的TAB都可以查看信息了。

當然,Druid還有很多其他的功能,在這篇文章中就一一展示,有興趣的朋友可以在Druid的Github網(wǎng)頁上查看。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring中@RestController和@Controller的使用及區(qū)別

    Spring中@RestController和@Controller的使用及區(qū)別

    這篇文章主要介紹了Spring中@RestController和@Controller的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • hadoop實現(xiàn)grep示例分享

    hadoop實現(xiàn)grep示例分享

    這篇文章主要介紹了hadoop實現(xiàn)grep示例,可從文檔中提取包含某些字符串的行,需要的朋友可以參考下
    2014-03-03
  • 深入理解Java中線程間的通信

    深入理解Java中線程間的通信

    一般來講,線程內部有自己私有的線程上下文,互不干擾。但是當我們需要多個線程之間相互協(xié)作的時候,就需要我們掌握Java線程的通信方式。本文將介紹Java線程之間的幾種通信原理,需要的可以參考一下
    2022-11-11
  • 淺談Java中BIO、NIO和AIO的區(qū)別和應用場景

    淺談Java中BIO、NIO和AIO的區(qū)別和應用場景

    這篇文章主要介紹了Java中BIO、NIO和AIO的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java高級用法中的JNA類型映射注意細節(jié)及使用問題

    Java高級用法中的JNA類型映射注意細節(jié)及使用問題

    本文介紹了在使用JNA方法映射中應該注意的一些細節(jié)和具體的使用問題,對java??JNA類型映射注意細節(jié)感興趣的朋友一起看看吧
    2022-04-04
  • Java接口回調的本質詳解

    Java接口回調的本質詳解

    大家好,本篇文章主要講的是Java接口回調的本質詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • spring boot優(yōu)雅集成redisson詳解

    spring boot優(yōu)雅集成redisson詳解

    這篇文章主要為大家介紹了spring boot優(yōu)雅集成redisson詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 詳解Spring學習之編程式事務管理

    詳解Spring學習之編程式事務管理

    本篇文章主要介紹了詳解Spring學習之編程式事務管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java中使用JavaMail多發(fā)郵件及郵件的驗證和附件實現(xiàn)

    Java中使用JavaMail多發(fā)郵件及郵件的驗證和附件實現(xiàn)

    這篇文章主要介紹了Java中使用Java Mail多發(fā)郵件及郵件的驗證和附件實現(xiàn),包括在郵件中加入圖片等功能的實現(xiàn)講解,需要的朋友可以參考下
    2016-02-02
  • java中關于getProperties方法的使用

    java中關于getProperties方法的使用

    這篇文章主要介紹了java中關于getProperties方法的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

万州区| 武义县| 南陵县| 泰安市| 瑞安市| 信阳市| 翼城县| 萝北县| 永靖县| 石河子市| 嘉善县| 兴国县| 隆回县| 栾城县| 鄢陵县| 鹿泉市| 伽师县| 通江县| 湛江市| 合作市| 万盛区| 长泰县| 新乐市| 商洛市| 云阳县| 乐安县| 临江市| 深水埗区| 安顺市| 扶绥县| 贵港市| 广元市| 寿光市| 阳城县| 北流市| 普兰店市| 屏边| 东安县| 厦门市| 泾源县| 噶尔县|