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

SpringBoot集成Druid實現(xiàn)監(jiān)控功能的示例代碼

 更新時間:2024年02月28日 08:53:18   作者:Spirit_NKlaus  
這篇文章主要介紹了SpringBoot集成Druid實現(xiàn)監(jiān)控功能,Druid是阿里巴巴開發(fā)的號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,天生就是針對監(jiān)控而生的DB連接池,文中通過代碼示例講解非常詳細(xì),需要的朋友可以參考下

Druid是阿里巴巴開發(fā)的號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,在功能、性能、擴展性方面,都超過其他數(shù)據(jù)庫連接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒殺一切。Druid可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,天生就是針對監(jiān)控而生的DB連接池。

官方的參考

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

一、傳統(tǒng)web項目(如ssh,ssm)

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.23</version>
</dependency>

使用xml或配置類配置好DruidDataSource

<!--使用druid數(shù)據(jù)源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
        <!--注入連接屬性-->
        <property name="driverClassName" value="xxx"/>
        <property name="url" value="xxx"/>
        <property name="username" value="xxx"/>
        <property name="password" value="xxx"/>
        <!--初始化連接池大小-->
        <property name="initialSize" value="5"></property>
        <!--設(shè)置最大連接數(shù)-->
        <property name="maxActive" value="20"></property>
        <!--設(shè)置等待時間-->
        <property name="maxWait" value="5000"/>
        <!--配置數(shù)據(jù)源監(jiān)控的filter-->
        <property name="filters" value="stat"></property>
    </bean>

在web應(yīng)用中的WEB-INF/web.xml中進行相關(guān)配置 

	<servlet>
		<servlet-name>StatViewServlet</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<!--登陸名-->
		<init-param>
			<param-name>loginUsername</param-name>
			<param-value>admin</param-value>
		</init-param>
		<!-- 登錄密碼-->
		<init-param>
			<param-name>loginPassword</param-name>
			<param-value>2024</param-value>
		</init-param>
		<!--白名單-->
		<init-param>
			<param-name>allow</param-name>
			<param-value></param-value>
		</init-param>
		<!--黑名單-->
		<init-param>
			<param-name>deny</param-name>
			<param-value></param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>StatViewServlet</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
 
	<filter>
		<filter-name>WebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<!--過濾的樣式-->
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>*.js,*.gif,*.css,*.ico,*.jpg,*.png,/druid/*</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>WebStatFilter</filter-name>
		<servlet-name>StatViewServlet</servlet-name>
	</filter-mapping>

二、springboot中引入原生的druid,依賴和上面一樣,編寫配置類即可

import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Configuration
public class DruidConfig {
 
    //登陸賬號
    private final String USERNAME = "root";
    //登陸密碼
    private final String PASSWORD = "123";
    @Value("${spring.datasource.url:#{null}}")
    private String dbUrl;
    @Value("${spring.datasource.username: #{null}}")
    private String username;
    @Value("${spring.datasource.password:#{null}}")
    private String password;
    @Value("${spring.datasource.driverClassName:#{null}}")
    private String driverClassName;
    /**
     * 以下屬性可在配置文件自行定義
     */
    private Integer initialSize = 5;
    private Integer minIdle = 10;
    private Integer maxActive = 20;
    private Integer maxWait = 60000;
 
    @Bean
    @Primary
    public DruidDataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(this.dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);
        if (initialSize != null) {
            datasource.setInitialSize(initialSize);
        }
        if (minIdle != null) {
            datasource.setMinIdle(minIdle);
        }
        if (maxActive != null) {
            datasource.setMaxActive(maxActive);
        }
        if (maxWait != null) {
            datasource.setMaxWait(maxWait);
        }
        List<Filter> filters = new ArrayList<>();
        filters.add(statFilter());
        filters.add(wallFilter());
        datasource.setProxyFilters(filters);
        return datasource;
    }
 
    @Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParameters = new HashMap<>();
        //禁用HTML頁面上的“Rest All”功能
        initParameters.put("resetEnable", "false");
        //ip白名單(沒配置則允許所有訪問)
        //initParameters.put("allow", "");
        //ip黑名單,如果某個ip同時存在,deny優(yōu)先于allow
        //initParameters.put("deny", "");
        initParameters.put("loginUsername", USERNAME);
        initParameters.put("loginPassword", PASSWORD);
        servletRegistrationBean.setInitParameters(initParameters);
        return servletRegistrationBean;
    }
 
    @Bean
    public StatFilter statFilter() {
        StatFilter statFilter = new StatFilter();
        //慢sql記錄
        statFilter.setLogSlowSql(true);
        statFilter.setMergeSql(true);
        //超過多少時間為慢sql
        statFilter.setSlowSqlMillis(3000);
        return statFilter;
    }
 
    @Bean
    public WallFilter wallFilter() {
        WallFilter wallFilter = new WallFilter();
        //允許執(zhí)行多條SQL
        WallConfig config = new WallConfig();
        config.setMultiStatementAllow(true);
        wallFilter.setConfig(config);
        return wallFilter;
    }
}

三、springboot druid starter方式

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.23</version>
</dependency>

按需配置application.yml的內(nèi)容

spring:
  datasource:
    url: ******
    username: ******
    password: ******
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  # 指定數(shù)據(jù)源類型
    ######### 連接池 配置 ##########
    druid:
      # 配置初始化大小、最小、最大
      initial-size: 5
      minIdle: 10
      max-active: 20
      # 配置獲取連接等待超時的時間(單位:毫秒)
      max-wait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
#      time-between-eviction-runs-millis: 2000
      # 配置一個連接在池中最小生存的時間,單位是毫秒
#      min-evictable-idle-time-millis: 600000
#      max-evictable-idle-time-millis: 900000
      # 用來測試連接是否可用的SQL語句,默認(rèn)值每種數(shù)據(jù)庫都不相同,這是mysql
#      validationQuery: select 1
      # 應(yīng)用向連接池申請連接,并且testOnBorrow為false時,連接池將會判斷連接是否處于空閑狀態(tài),如果是,則驗證這條連接是否可用
#      testWhileIdle: true
      # 如果為true,默認(rèn)是false,應(yīng)用向連接池申請連接時,連接池會判斷這條連接是否是可用的
#      testOnBorrow: false
      # 如果為true(默認(rèn)false),當(dāng)應(yīng)用使用完連接,連接池回收連接的時候會判斷該連接是否還可用
#      testOnReturn: false
      # 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle
#      poolPreparedStatements: true
      # 要啟用PSCache,必須配置大于0,當(dāng)大于0時, poolPreparedStatements自動觸發(fā)修改為true,
      # 在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,
      # 可以把這個數(shù)值配置大一些,比如說100
#      maxOpenPreparedStatements: 20
      # 連接池中的minIdle數(shù)量以內(nèi)的連接,空閑時間超過minEvictableIdleTimeMillis,則會執(zhí)行keepAlive操作
#      keepAlive: true
      # Spring 監(jiān)控,利用aop 對指定接口的執(zhí)行時間,jdbc數(shù)進行記錄
      aop-patterns: "com.springboot.template.dao.*"
      ########### 啟用內(nèi)置過濾器(第一個 stat必須,否則監(jiān)控不到SQL)##########
      filters: stat,wall,log4j2
      # 自己配置監(jiān)控統(tǒng)計攔截的filter
      filter:
        # 開啟druiddatasource的狀態(tài)監(jiān)控
        stat:
          enabled: true
          db-type: mysql
          # 開啟慢sql監(jiān)控,超過2s 就認(rèn)為是慢sql,記錄到日志中
          log-slow-sql: true
          slow-sql-millis: 2000
        # 日志監(jiān)控,使用slf4j 進行日志輸出
#        slf4j:
#          enabled: true
#          statement-log-error-enabled: true
#          statement-create-after-log-enabled: false
#          statement-close-after-log-enabled: false
#          result-set-open-after-log-enabled: false
#          result-set-close-after-log-enabled: false
      ########## 配置WebStatFilter,用于采集web關(guān)聯(lián)監(jiān)控的數(shù)據(jù) ##########
      web-stat-filter:
        # 啟動 StatFilter
        enabled: true
        # 過濾所有url
        url-pattern: /*
        # 排除一些不必要的url
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        # 開啟session統(tǒng)計功能
        session-stat-enable: true
        # session的最大個數(shù),默認(rèn)100
        session-stat-max-count: 1000
      ########## 配置StatViewServlet(監(jiān)控頁面),用于展示Druid的統(tǒng)計信息 ##########
      stat-view-servlet:
        # 啟用StatViewServlet
        enabled: true
        # 訪問內(nèi)置監(jiān)控頁面的路徑,內(nèi)置監(jiān)控頁面的首頁是/druid/index.html
        url-pattern: /druid/*
        # 不允許清空統(tǒng)計數(shù)據(jù),重新計算
        reset-enable: false
        # 配置監(jiān)控頁面訪問密碼
        login-username: root
        login-password: 123
        # 允許訪問的地址,如果allow沒有配置或者為空,則允許所有訪問
#        allow:
        # 拒絕訪問的地址,deny優(yōu)先于allow,如果在deny列表中,就算在allow列表中,也會被拒絕
#        deny:

訪問監(jiān)控頁面

頁面簡單介紹 

1、數(shù)據(jù)源頁面:是當(dāng)前DataSource配置的基本信息,上述配置的Filter可以在里面找到,如果沒有配置Filter(一些信息會無法統(tǒng)計,例如“SQL監(jiān)控”,會無法獲取JDBC相關(guān)的SQL執(zhí)行信息)。

2、SQL監(jiān)控頁面:統(tǒng)計了所有SQL語句的執(zhí)行情況。

3、URL監(jiān)控頁面:統(tǒng)計了所有Controller接口的訪問以及執(zhí)行情況。

4、Spring 監(jiān)控頁面,利用aop 對指定接口的執(zhí)行時間,jdbc數(shù)進行記錄。

5、SQL防火墻頁面:druid提供了黑白名單的訪問,可以清楚的看到sql防護情況。

6、Session監(jiān)控頁面:可以看到當(dāng)前的session狀況,創(chuàng)建時間、最后活躍時間、請求次數(shù)、請求時間等詳細(xì)參數(shù)。

7、JSONAPI 頁面:通過api的形式訪問Druid的監(jiān)控接口,api接口返回Json形式數(shù)據(jù)。 

以上就是SpringBoot集成Druid實現(xiàn)監(jiān)控功能的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Druid監(jiān)控的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決

    Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決

    這篇文章主要介紹了Mybatis反向工程出現(xiàn)BigDecimal類型問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Spring中網(wǎng)絡(luò)請求客戶端WebClient的使用詳解

    Spring中網(wǎng)絡(luò)請求客戶端WebClient的使用詳解

    作為替代,Spring 官方已在 Spring 5 中引入了 WebClient 作為非阻塞式 Reactive HTTP 客戶端,本文將通過樣例演示如何使用 WebClient,希望對大家有所幫助
    2024-04-04
  • java虛擬機內(nèi)存溢出及泄漏實例

    java虛擬機內(nèi)存溢出及泄漏實例

    本篇文章給大家分享了java虛擬機內(nèi)存溢出及泄漏的實例以及相關(guān)知識點分享,有興趣的朋友參考學(xué)習(xí)下。
    2018-06-06
  • java抓取網(wǎng)頁數(shù)據(jù)示例

    java抓取網(wǎng)頁數(shù)據(jù)示例

    要通java獲取整個網(wǎng)頁的html內(nèi)容,或者某個網(wǎng)絡(luò)文件的內(nèi)容,可以使用java提供的HttpURLConnection類來實現(xiàn)對網(wǎng)頁內(nèi)容的抓取
    2014-03-03
  • java利用oss實現(xiàn)下載功能

    java利用oss實現(xiàn)下載功能

    這篇文章主要為大家詳細(xì)介紹了java利用oss實現(xiàn)下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • SpringBoot集成netty實現(xiàn)websocket通信功能

    SpringBoot集成netty實現(xiàn)websocket通信功能

    Netty是一個高性能、異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用框架,用于快速開發(fā)可維護的高性能協(xié)議服務(wù)器和客戶端,WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,相比傳統(tǒng)的HTTP協(xié)議,本文給大家介紹了SpringBoot集成netty實現(xiàn)websocket通信功能,需要的朋友可以參考下
    2024-03-03
  • Java try-catch-finally異常處理機制詳解

    Java try-catch-finally異常處理機制詳解

    這篇文章主要介紹了Java try-catch-finally異常處理機制詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 學(xué)習(xí)Java設(shè)計模式之觀察者模式

    學(xué)習(xí)Java設(shè)計模式之觀察者模式

    這篇文章主要為大家介紹了Java設(shè)計模式中的觀察者模式,對Java設(shè)計模式感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java Commons-IO的安裝及使用教程詳解

    Java Commons-IO的安裝及使用教程詳解

    本文講解Apache Commons-IO庫的安裝與使用,包括下載、IDE導(dǎo)入及FileUtils方法示例,如文件復(fù)制,幫助簡化Java I/O操作,避免資源泄漏等問題,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • springboot整合netty框架實現(xiàn)站內(nèi)信

    springboot整合netty框架實現(xiàn)站內(nèi)信

    Netty 是一個基于NIO的客戶、服務(wù)器端編程框架,使用Netty 可以確保你快速和簡單的開發(fā)出一個網(wǎng)絡(luò)應(yīng)用,這篇文章主要介紹了springboot整合netty框架的方式小結(jié),需要的朋友可以參考下
    2022-12-12

最新評論

阿合奇县| 达日县| 泸州市| 水城县| 迁西县| 屏南县| 靖远县| 隆德县| 威信县| 五莲县| 香格里拉县| 阜宁县| 牙克石市| 余庆县| 赣州市| 霍州市| 即墨市| 兴安县| 贵阳市| 砀山县| 揭西县| 宜昌市| 开化县| 香港| 青铜峡市| 任丘市| 德庆县| 交城县| 陆川县| 晋城| 龙海市| 湖南省| 博罗县| 宁远县| 永安市| 紫金县| 西丰县| 海伦市| 灵宝市| 西平县| 永和县|