亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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中進(jìn)行相關(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
      # 配置間隔多久才進(jìn)行一次檢測,檢測需要關(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ù)進(jìn)行記錄
      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 進(jìn)行日志輸出
#        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ù)進(jìn)行記錄。

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

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)文章

  • 基于SpringMVC實現(xiàn)網(wǎng)頁登錄攔截

    基于SpringMVC實現(xiàn)網(wǎng)頁登錄攔截

    SpringMVC的處理器攔截器類似于Servlet開發(fā)中的過濾器Filter,用于對處理器進(jìn)行預(yù)處理和后處理。因此,本文將為大家介紹如何通過SpringMVC實現(xiàn)網(wǎng)頁登錄攔截功能,需要的小伙伴可以了解一下
    2021-12-12
  • Spring Boot 中整合 MyBatis-Plus詳細(xì)步驟(最新推薦)

    Spring Boot 中整合 MyBatis-Plus詳細(xì)步驟(最新推薦)

    本文詳細(xì)介紹了如何在SpringBoot項目中整合MyBatis-Plus,包括整合步驟、基本CRUD操作、分頁查詢、批量操作、自定義SQL操作等,通過這些步驟,開發(fā)者可以快速實現(xiàn)數(shù)據(jù)庫操作,提高開發(fā)效率,感興趣的朋友一起看看吧
    2025-01-01
  • 解決Spring session(redis存儲方式)監(jiān)聽導(dǎo)致創(chuàng)建大量redisMessageListenerContailner-X線程問題

    解決Spring session(redis存儲方式)監(jiān)聽導(dǎo)致創(chuàng)建大量redisMessageListenerConta

    這篇文章主要介紹了解決Spring session(redis存儲方式)監(jiān)聽導(dǎo)致創(chuàng)建大量redisMessageListenerContailner-X線程問題,需要的朋友可以參考下
    2018-08-08
  • Java常用加密算法實例總結(jié)

    Java常用加密算法實例總結(jié)

    這篇文章主要介紹了Java常用加密算法,結(jié)合實例形式總結(jié)分析了base64、md5、sha、rsa、des等加密算法實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換的代碼詳解

    Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換的代碼詳解

    File、Base64和MultipartFile都是在編程中常用的類或者數(shù)據(jù)類型,用于處理文件和數(shù)據(jù)的存儲、傳輸和轉(zhuǎn)換等操作,本文將給大家介紹了Java中File、Base64、MultipartFile之間相互轉(zhuǎn)換,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • maven工程打包引入本地jar包的實現(xiàn)

    maven工程打包引入本地jar包的實現(xiàn)

    我們需要將jar包發(fā)布到一些指定的第三方Maven倉庫,本文主要介紹了maven工程打包引入本地jar包的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • spring boot輸入數(shù)據(jù)校驗(validation)的實現(xiàn)過程

    spring boot輸入數(shù)據(jù)校驗(validation)的實現(xiàn)過程

    web項目中,用戶的輸入總是被假定不安全不正確的,在被處理前需要做校驗。本文介紹在spring boot項目中實現(xiàn)數(shù)據(jù)校驗的過程,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • 最新評論