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

Druid數(shù)據(jù)庫連接池監(jiān)控使用及說明

 更新時間:2025年12月26日 15:12:04   作者:棉花糖老丫  
Druid是Java數(shù)據(jù)庫連接池,具有監(jiān)控和擴展功能,性能好,自帶監(jiān)控頁面,支持密碼加密、SQL執(zhí)行日志等,Druid已經(jīng)在阿里巴巴部署了超過600個應用

1、Druid數(shù)據(jù)連接池簡介

Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強大的監(jiān)控和擴展功能。

性能好,同時自帶監(jiān)控頁面,可以實時監(jiān)控應用的連接池情況以及其中性能差的sql,方便我們找出應用中連接池方面的問題。

Druid是一個JDBC組件,它包括三部分:

  • DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系
  • DruidDataSource 高效可管理的數(shù)據(jù)庫連接池
  • SQLParser

Druid可以做什么

  • 可以監(jiān)控數(shù)據(jù)庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統(tǒng)計SQL的執(zhí)行性能,這對于線上分析數(shù)據(jù)庫訪問性能有幫助。
  • 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數(shù)據(jù)庫連接池。
  • 數(shù)據(jù)庫密碼加密。直接把數(shù)據(jù)庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL執(zhí)行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監(jiān)控你應用的數(shù)據(jù)庫訪問情況。

2、druid監(jiān)控

Druid已經(jīng)在阿里巴巴部署了超過600個應用,經(jīng)過一年多生產(chǎn)環(huán)境大規(guī)模部署的嚴苛考驗。

2.1、下載druid包

Maven配置:

<!--  阿里druid 數(shù)據(jù)源 start  -->

 <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</artifactId>

    <version>1.1.10</version></dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-api</artifactId>

<version>1.7.25</version>

</dependency>

<!--  阿里druid 數(shù)據(jù)源 end  -->

最新版druid 引用了slf4j 所以需要一并加入,否則會報找不到slf4的錯誤。

2.2、applicationContext.xml引入配置文件數(shù)據(jù)庫連接相關信息

<!-- 引入配置文件 --> 

    <bean id="propertyConfigurer" 

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

         <property name="location" value="classpath:jdbc.properties" />

    </bean> 

jdbc.properties 中配置數(shù)據(jù)庫鏈接信息:

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.110.3.17:1521:實例名
jdbc.username=user
jdbc.password=password

2.3、applicationContext.xml數(shù)據(jù)源的配置

<!--  阿里druid 數(shù)據(jù)源 dataSource  start  -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  init-method="init" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driver}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <!-- 配置初始化大小、最小、最大 -->
  <property name="initialSize" value="10" />
  <property name="minIdle" value="10" />
  <property name="maxActive" value="50" />
  <!-- 配置獲取連接等待超時的時間 -->
  <property name="maxWait" value="10000" />
  <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
  <property name="timeBetweenEvictionRunsMillis" value="60000" />
  <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
  <property name="minEvictableIdleTimeMillis" value="300000" />
  <property name="testWhileIdle" value="true" />
  <!-- 這里建議配置為TRUE,防止取到的連接不可用 -->
  <property name="testOnBorrow" value="true" />
  <property name="testOnReturn" value="false" />
  <!-- 打開PSCache,并且指定每個連接上PSCache的大小 -->
  <property name="poolPreparedStatements" value="true" />
  <property name="maxPoolPreparedStatementPerConnectionSize"
   value="20" />
  <!-- 這里配置提交方式,默認就是TRUE,可以不用配置 -->
  <property name="defaultAutoCommit" value="true" />
  <!-- 驗證連接有效與否的SQL,不同的數(shù)據(jù)配置不同  mysql:select 1  ;oracle : select 1 from dual -->
  <property name="validationQuery" value="select 1 from dual" />
  <property name="filters" value="wall,stat" />
  <property name="proxyFilters">
   <list>
    <ref bean="logFilter" />
    <ref bean="stat-filter" />
   </list>
  </property>
 </bean>
     <!-- 慢SQL記錄 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 慢sql時間設置,即執(zhí)行時間大于50毫秒的都是慢sql -->
        <property name="slowSqlMillis" value="50"/>
        <property name="logSlowSql" value="true"/>
    </bean>
      <bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
      <property name="dataSourceLogEnabled" value="true" />
      <property name="statementExecutableSqlLogEnable" value="true" />
     </bean>
    
     <!--  阿里druid 數(shù)據(jù)源 dataSource  end  -->    

2.4、web.xml中加入監(jiān)控配置

只需要在web.xml中做一下簡單的Servlet配置即可。

<!--連接池啟用Web監(jiān)控統(tǒng)計功能start -->
    <filter>
        <filter-name>DruidWebStatFilter</filter-name>
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
        <init-param>
            <param-name>exclusions</param-name>
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>DruidWebStatFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        <init-param>
            <!-- 不允許清空統(tǒng)計數(shù)據(jù) -->
            <param-name>resetEnable</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <!-- 用戶名 -->
            <param-name>loginUsername</param-name>
            <param-value>yourname</param-value>
        </init-param>
        <init-param>
            <!-- 密碼 -->
            <param-name>loginPassword</param-name>
            <param-value>yourpassword</param-value>
        </init-param>
       
       
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>
<!--連接池啟用Web監(jiān)控統(tǒng)計功能end-->

重新構建工程并啟動tomcat,啟動項目http://ip:端口/項目名稱/druid/即可進入到druid監(jiān)控面板的登錄頁面,如下圖。

輸入在web.xml中配置的賬號和密碼即可進入監(jiān)控后臺,注意,配置的賬號和密碼是明文,你在這里配置什么就是什么,并沒有經(jīng)過加密。

OK,我們看到系統(tǒng)的一些簡述信息,當然,你也應該看到啟動時間了.

接下來是比較重要的一個頁面,SQL監(jiān)控:

從這個頁面里我們能看到網(wǎng)站從啟動開始執(zhí)行的sql語句統(tǒng)計,每一條語句的執(zhí)行次數(shù)、執(zhí)行時間之和、最慢執(zhí)行時間、執(zhí)行錯誤數(shù)等等多個統(tǒng)計指標,通過這個統(tǒng)計數(shù)據(jù)我們可以找出sql語句的執(zhí)行規(guī)律及sql語句的不足之處,也可以通過錯誤數(shù)來定位程序的不足并及時修改。

在配置druid數(shù)據(jù)源時,做了如下配置,開啟了druid防火墻。

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

因此在控制后臺也能見到SQL防火墻面板,如下圖所示:

面板里是防御統(tǒng)計及sql的統(tǒng)計信息,這里用的是druid默認的一些過濾規(guī)則,并沒有自定義復雜的防火墻規(guī)則,因此也不細說了。

2.5、開啟慢sql監(jiān)控

在SQL監(jiān)控中,有一項關于sql執(zhí)行最慢執(zhí)行時間的統(tǒng)計,但是只有一個值,就是一條sql語句最慢的執(zhí)行時間記錄,其他執(zhí)行時間是看不到的,只能通過總時間來進行粗略的估計,還有一個問題就是,一旦項目重啟,這些記錄就全都沒了,因此制定對應的日志輸出策略是極其必要的。

大致想法就是通過druid獲取所有項目運行中的慢sql執(zhí)行記錄,并將這些數(shù)據(jù)輸出到日志文件中,查了一下druid的資料,調試了一段時間,最終成功實現(xiàn)。

1、修改數(shù)據(jù)源配置,增加攔截器:

<property name="proxyFilters">
   <list>
    <ref bean="logFilter" />
    <ref bean="stat-filter" />
   </list>
  </property>

2、配置慢sql及日志攔截器:

<!-- 慢SQL記錄 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 慢sql時間設置,即執(zhí)行時間大于50毫秒的都是慢sql -->
        <property name="slowSqlMillis" value="50"/>
        <property name="logSlowSql" value="true"/>
    </bean>
      <bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
      <property name="dataSourceLogEnabled" value="true" />
      <property name="statementExecutableSqlLogEnable" value="true" />
     </bean>

3、修改log4j 配置文件,增加慢sql日志的輸出策略:

#--------------------增加druid監(jiān)控日志輸出
log4j.rootLogger=DEBUG, Console ,druid

#Console 
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.layout=org.apache.log4j.PatternLayout 
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 

log4j.logger.java.sql.ResultSet=INFO 
log4j.logger.org.apache=INFO 
log4j.logger.java.sql.Connection=DEBUG 
log4j.logger.java.sql.Statement=DEBUG 
log4j.logger.java.sql.PreparedStatement=DEBUG 
#log4j.rootLogger=DEBUG,debug,druid
# Druid    -------------------增加Druid監(jiān)控日志輸出
log4j.logger.druid.sql=WARN,druid
log4j.logger.druid.sql.DataSource=WARN,druid
log4j.logger.druid.sql.Connection=WARN,druid
log4j.logger.druid.sql.Statement=WARN,druid
log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druid.layout=org.apache.log4j.PatternLayout
log4j.appender.druid.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.druid.datePattern='.'yyyy-MM-dd
log4j.appender.druid.Threshold = WARN
log4j.appender.druid.append=true
log4j.appender.druid.File=${catalina.home}/logs/ssm-maven/druid-slow-sql.log

重啟再去查看druid監(jiān)控后臺,可以看到跟原來有了一些差別,由于設置了慢sql的時間為大于50毫秒,所以執(zhí)行時間大于50毫秒的都會被紅色標注。

再去tomcat日志文件夾中查看日志文件,可以看到日志文件中已經(jīng)存在配置的慢sql日志文件了,點擊查看其中也已經(jīng)有了慢sql記錄的數(shù)據(jù),慢sql以及這條sql語句執(zhí)行的時間都有記錄。

2.6、開啟spring監(jiān)控

在監(jiān)控面板中看到有spring監(jiān)控這個功能,如果沒有進行配置,則功能不能用,查了一下druid的文檔,最終開啟了spring監(jiān)控功能。

配置如下:

<!--  阿里druid Spring監(jiān)控  start  -->    
    <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.inspur.smvc.service.*</value>
                <value>com.inspur.smvc.dao.*</value>
            </list>
        </property>
    </bean>
    <aop:config>
        <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
    </aop:config>
<!--  阿里druid Spring監(jiān)控  end  -->   

再次查看spring監(jiān)控頁面,已經(jīng)有了數(shù)據(jù):

原先的做法只能對sql語句及jdbc相關操作進行監(jiān)控,無法監(jiān)控到代碼級別的運行,因此進一步設置,結合springAOP特性對代碼的運行效果進行監(jiān)控,druid可以做到方法級別的監(jiān)控,這個功能可以讓你發(fā)現(xiàn)方法的調用頻率及方法的運行時間,及時做出調整和修正使得項目更健壯。

總結

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

相關文章

  • java通過JFrame做一個登錄系統(tǒng)的界面完整代碼示例

    java通過JFrame做一個登錄系統(tǒng)的界面完整代碼示例

    這篇文章主要介紹了java通過JFrame做一個登錄系統(tǒng)的界面完整代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java報錯:找不到或無法加載主類的解決辦法

    Java報錯:找不到或無法加載主類的解決辦法

    在Java中當您嘗試運行一個類作為主類時,如果系統(tǒng)找不到該類或者無法加載該類,就會出現(xiàn)"找不到或無法加載主類"的錯誤,這篇文章主要給大家介紹了關于Java報錯:找不到或無法加載主類的解決辦法,需要的朋友可以參考下
    2024-12-12
  • jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決

    jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決

    這篇文章主要介紹了jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法

    詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法

    這篇文章主要介紹了詳解Java中實現(xiàn)SHA1與MD5加密算法的基本方法,安全哈希算法第一版和消息摘要算法第五版也是通常人們最常用的加密算法,需要的朋友可以參考下
    2016-04-04
  • springboot如何設置請求參數(shù)長度和文件大小限制

    springboot如何設置請求參數(shù)長度和文件大小限制

    這篇文章主要介紹了springboot如何設置請求參數(shù)長度和文件大小限制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Spring Boot啟動banner定制的步驟詳解

    Spring Boot啟動banner定制的步驟詳解

    這篇文章主要給大家介紹了關于Spring Boot啟動banner定制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • IDEA自動導入包實現(xiàn)方式

    IDEA自動導入包實現(xiàn)方式

    文章介紹了如何在IntelliJ IDEA中自動導入包,包括配置步驟和具體操作,通過設置“Add unambiguous imports on the fly”和“Optimize imports on the fly”,可以實現(xiàn)自動導入和優(yōu)化導入語句,提高開發(fā)效率
    2026-01-01
  • java并查集算法帶你領略熱血江湖

    java并查集算法帶你領略熱血江湖

    這篇文章主要為大家介紹了java并查集算法,以大家熱愛的方式,帶你領略熱血江湖中的并查集算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Java使用jacob將微軟office中word、excel、ppt轉成pdf

    Java使用jacob將微軟office中word、excel、ppt轉成pdf

    這篇文章主要為大家詳細介紹了Java使用jacob將微軟office中word、excel、ppt轉成pdf,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java按周對事件進行分組的實現(xiàn)示例

    Java按周對事件進行分組的實現(xiàn)示例

    本兒主要介紹了Java按周對事件進行分組,java.time包提供了處理日期和時間的功能,包括獲取某個日期屬于一年中的第幾周,具有一定的參考價值,感興趣的可以了解一下
    2025-08-08

最新評論

三台县| 安义县| 湘乡市| 平湖市| 怀安县| 西平县| 易门县| 张掖市| 准格尔旗| 和林格尔县| 望都县| 来安县| 内江市| 永州市| 临桂县| 桑植县| 乡城县| 昂仁县| 称多县| 和顺县| 苍南县| 乐至县| 九龙坡区| 巫溪县| 高要市| 石阡县| 衡阳县| 南康市| 承德市| 印江| 屏山县| 临沭县| 浙江省| 阿拉善盟| 景东| 历史| 桂东县| 梁山县| 澎湖县| 牟定县| 张家港市|