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

SpringBoot中如何對(duì)actuator進(jìn)行關(guān)閉

 更新時(shí)間:2023年03月09日 11:00:27   作者:菜鳥(niǎo)是大神  
這篇文章主要介紹了SpringBoot中如何對(duì)actuator進(jìn)行關(guān)閉問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot對(duì)actuator進(jìn)行關(guān)閉

management:
  endpoint:
    health:
      show-details: ALWAYS
  endpoints:
    enabled-by-default: false #關(guān)閉監(jiān)控
    web:
      exposure:
        include: '*'

SpringBoot actuator知識(shí)梳理

Spring Boot的Actuator。它提供了很多生產(chǎn)級(jí)的特性,比如監(jiān)控和度量Spring Boot應(yīng)用程序。Actuator的這些特性可以通過(guò)眾多REST端點(diǎn)、遠(yuǎn)程shell和JMX獲得。

【使用環(huán)境】

【1】SpringBoot版本2.5.0、JDK11

【2】服務(wù)端口 9999

添加依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

啟動(dòng)項(xiàng)目,訪問(wèn)/actuator端點(diǎn),SpringBoot2.X版本默認(rèn)只開(kāi)啟了如下端點(diǎn)

可以通過(guò)下面的方式開(kāi)啟其他的端點(diǎn),如果需要關(guān)閉某些端點(diǎn)可以在exclude中設(shè)置。

management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: ""

重新啟動(dòng)項(xiàng)目,可以看到現(xiàn)在展示的端點(diǎn)增加了很多

官方文檔:

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

Actuator端點(diǎn)整理

/autoconfig和/conditions 獲取自動(dòng)配置條件

提供了一份自動(dòng)配置報(bào)告,記錄哪些自動(dòng)配置條件通過(guò)了,哪些沒(méi)通過(guò)。新版本已經(jīng)調(diào)整為conditions。Spring Boot自動(dòng)配置構(gòu)建于Spring的條件化配置之上。它提供了眾多帶有@Conditional注解的配置類,根據(jù)條件決定是否要自動(dòng)配置這些Bean。/autoconfig端點(diǎn)提供了一個(gè)報(bào)告,列出了計(jì)算過(guò)的所有條件,根據(jù)條件是否通過(guò)進(jìn)行分組。

端點(diǎn):http://localhost:9999/actuator/conditions

【舉例】

上面是失敗的一個(gè)條件示例,如圖所示是JdbcTemplate,這個(gè)類可以幫助我們操作數(shù)據(jù)庫(kù)。因?yàn)槲匆胂嚓P(guān)的依賴類所以正如它的提示信息所說(shuō):

“message”: “@ConditionalOnClass did not find required class ‘org.springframework.jdbc.core.JdbcTemplate’”

檢查Classpath沒(méi)有要求的JdbcTemplate條件不成立,則不會(huì)進(jìn)行自動(dòng)配置

/beans 獲得Bean裝配報(bào)告

要了解應(yīng)用程序中Spring上下文的情況,最重要的端點(diǎn)就是/beans。它會(huì)返回一個(gè)JSON文檔,描述上下文里每個(gè)Bean的情況,包括其Java類型以及注入的其他Bean。

請(qǐng)求端點(diǎn):/actuator/beans

/env端點(diǎn)查看配置屬性

/env端點(diǎn)會(huì)生成應(yīng)用程序可用的所有環(huán)境屬性的列表,無(wú)論這些屬性是否用到。這其中包括環(huán)境變量、JVM屬性、命令行參數(shù),以及applicaition.properties或application.yml文件提供的屬性。

端點(diǎn):/actuator/env

/env提供了一些安全策略保護(hù)配置的隱私性。為了避免此類信息暴露到/env里,所有名為password、secret、key(或者名字中最后一段是這些)的屬性在/env里都會(huì)加上“*”,參考如下:

/mapping請(qǐng)求URL映射

/mapping端點(diǎn)展示了所有@RequestMapping 請(qǐng)求路徑

請(qǐng)求端點(diǎn):/actuator/mappings

【測(cè)試接口】

    @GetMapping(value = "/hello", produces = "application/json;charset=utf-8")
    public String hello(@RequestParam("name") String name) {
        return "hello world";
    }

每個(gè)映射的值都有兩個(gè)屬性:bean和method。bean屬性標(biāo)識(shí)了Spring

Bean的名字,映射源自這個(gè)Bean。method屬性是映射對(duì)應(yīng)方法的全限定方法簽名。

/metrics運(yùn)行時(shí)指標(biāo)監(jiān)控

/metrics為我們提供了對(duì)運(yùn)行時(shí)度量情況的一個(gè)監(jiān)控,能夠在運(yùn)行時(shí)快速檢查應(yīng)用程序。

端點(diǎn):/actuator/metrics

主要的監(jiān)控事項(xiàng)如下:

/metrics端點(diǎn)會(huì)返回所有的可用度量值,但你也可能只對(duì)某個(gè)值感興趣。要獲取單個(gè)值,請(qǐng)求時(shí)可以在URL后加上對(duì)應(yīng)的鍵名。

如上圖所示,查詢jvm最大內(nèi)存,結(jié)果值大約為6G。

/httptrace 追蹤Web請(qǐng)求

/httptrace端點(diǎn)能報(bào)告所有Web請(qǐng)求的詳細(xì)信息,包括請(qǐng)求方法、路徑、時(shí)間戳以及請(qǐng)求和響應(yīng)的頭信息。

【請(qǐng)求端點(diǎn)】/actuator/httptrace

默認(rèn)情況下httptrace沒(méi)有啟用,它要求一個(gè)HttpTraceRepository 的對(duì)象Bean.

在系統(tǒng)中創(chuàng)建如下配置,提供一個(gè)HttpTraceRepository 類型的Bean,這里選擇的是InMemoryHttpTraceRepository內(nèi)存存儲(chǔ)的方式。該方式默認(rèn)提供最新的100條請(qǐng)求記錄。

import org.springframework.boot.actuate.trace.http.HttpTraceRepository;
import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpTraceActuatorConfiguration {

    @Bean
    public HttpTraceRepository httpTraceRepository() {
        return new InMemoryHttpTraceRepository();
    }

}

/dump 導(dǎo)出線程快照

/dump端點(diǎn)會(huì)生成當(dāng)前線程活動(dòng)的快照。完整的線程導(dǎo)出報(bào)告里會(huì)包含應(yīng)用程序的每個(gè)線程。其中包含很多線程的特定信息,還有線程相關(guān)的阻塞和鎖狀態(tài)。

【請(qǐng)求端點(diǎn)】/threaddump

【測(cè)試】

     Thread thread = new Thread(() -> {
            try {
                Thread.sleep(1000000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "測(cè)試線程");
        thread.start();

/shutdown 優(yōu)雅的關(guān)閉應(yīng)用程序

/shutdown可以讓?xiě)?yīng)用服務(wù)優(yōu)雅的關(guān)閉,默認(rèn)是關(guān)閉的。假設(shè)你要關(guān)閉運(yùn)行中的應(yīng)用程序。比方說(shuō),在微服務(wù)架構(gòu)中,你有多個(gè)微服務(wù)應(yīng)用的實(shí)例運(yùn)行在云上,其中某個(gè)實(shí)例有問(wèn)題了,你決定關(guān)閉該實(shí)例并重啟這個(gè)有問(wèn)題的應(yīng)用程序。在這個(gè)場(chǎng)景中,Actuator的/shutdown端點(diǎn)就很有用了。

優(yōu)雅的關(guān)閉和kill -9的方式是相對(duì)的,它不會(huì)粗暴的立馬關(guān)閉應(yīng)用,而是會(huì)釋放相關(guān)鏈接以及執(zhí)行SpringBoot容器停止后的一些操作,然后再關(guān)閉應(yīng)用。

【端點(diǎn)】/actuator/shutdown 要求POST請(qǐng)求方式

【示例】

在應(yīng)用中添加一個(gè)關(guān)閉前處理的鉤子方法

        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("關(guān)閉應(yīng)用,釋放資源");
        }));

可以看到通過(guò)/actuator/shutdown關(guān)閉應(yīng)用可以觸發(fā)這些關(guān)閉處理的鉤子函數(shù),方便我們?cè)趹?yīng)用停止時(shí)關(guān)閉一些連接以及做一些其他的處理。

整理

【1】上面實(shí)踐了一些Actuator端點(diǎn)示例,雖然Actuator提供的功能很強(qiáng)大,但是在如今的集群化,K8S容器化應(yīng)用部署下,這些直接訪問(wèn)某些應(yīng)用的情況就變得很少了,比如監(jiān)控Zipkin 、Spring Cloud Sleuth等等,內(nèi)存監(jiān)控這一塊K8S容器化平臺(tái)也有很多。但是,去學(xué)習(xí)實(shí)踐這樣的一個(gè)工具也是很值得的,如果后面有類似監(jiān)控、關(guān)閉應(yīng)用、獲取請(qǐng)求URL映射、獲取配置等等,那么我們就可以去看看Actuator是如何做的,學(xué)習(xí)和擴(kuò)展。

【2】本次的學(xué)習(xí)時(shí)看的《SpringBoot實(shí)戰(zhàn)》書(shū)籍的學(xué)習(xí)筆記,該書(shū)Actuator章節(jié)后在后面也提及了很多進(jìn)階的知識(shí),因?yàn)榫唧w應(yīng)用場(chǎng)景不多,下面就簡(jiǎn)單的整理下,把一些知識(shí)點(diǎn)記錄下來(lái),如果后面需要在重點(diǎn)實(shí)踐學(xué)習(xí)下。

【3】《SpringBoot實(shí)戰(zhàn)》書(shū)籍關(guān)于Actuator介紹的一些使用可能在當(dāng)下的版本中有些出入,這里貼上官方文檔地址,參考對(duì)比下https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling

【4】Actuator通過(guò)REST端點(diǎn)提供了不少非常有用的信息。另一個(gè)深入運(yùn)行中應(yīng)用程序內(nèi)部的方式是使用遠(yuǎn)程shell。Spring Boot集成了CRaSH,一種能嵌入任意Java應(yīng)用程序的shell。Spring Boot還擴(kuò)展了CRaSH,添加了不少Spring Boot特有的命令,提供了與Actuator端點(diǎn)類似的功能。該工具附上應(yīng)用上,會(huì)在啟動(dòng)時(shí)提供一個(gè)訪問(wèn)秘鑰,我們通過(guò)ssh user@localhost -p 2000 的方式就可以去訪問(wèn),并且執(zhí)行一些命令去查看應(yīng)用數(shù)據(jù)。

【5】除了REST端點(diǎn)和遠(yuǎn)程shell,Actuator還把它的端點(diǎn)以MBean的方式發(fā)布了出來(lái),可以通過(guò)JMX來(lái)查看和管理。使用JMX是管理Spring Boot應(yīng)用程序的一個(gè)好方法,如果你已在用JMX管理應(yīng)用程序中的其他MBean,則尤其如此。

【6】前面我們使用了Actuator所提供好的一些內(nèi)置端點(diǎn),我們也可以根據(jù)自己的需求擴(kuò)展定制Actuator。

  • 實(shí)際上,Actuator有多種定制方式,包括以下五項(xiàng)。
  • 1:重命名端點(diǎn)。將默認(rèn)的端點(diǎn)修改為我們自定義的端點(diǎn)地址。
  • 2:?jiǎn)⒂煤徒枚它c(diǎn)。
  • 3:自定義度量信息。
  • 4:創(chuàng)建自定義倉(cāng)庫(kù)來(lái)存儲(chǔ)跟蹤數(shù)據(jù)。
  • 5:插入自定義的健康指示器。

【7】到這里我們可以看到通過(guò)Actuator我們可以看到系統(tǒng)的很多信息,這對(duì)于開(kāi)發(fā)者而言很好,但是在安全層面來(lái)說(shuō),如果不加以限制,那么系統(tǒng)的安全將會(huì)有很大隱患。Actuator的端點(diǎn)保護(hù)可以用和其他URL路徑一樣的方式——使用Spring Security。在Spring Boot應(yīng)用程序中,這意味著將Security起步依賴作為構(gòu)建依賴加入,然后讓安全相關(guān)的自動(dòng)配置來(lái)保護(hù)應(yīng)用程序,其中當(dāng)然也包括了Actuator端點(diǎn)。舉例來(lái)說(shuō),你想要保護(hù)/shutdown端點(diǎn),僅允許擁有ADMIN權(quán)限的用戶訪問(wèn)

總結(jié)

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

相關(guān)文章

  • java開(kāi)發(fā)微信公眾號(hào)支付

    java開(kāi)發(fā)微信公眾號(hào)支付

    這篇文章主要給大家結(jié)合微信支付接口開(kāi)發(fā)的實(shí)踐,從獲取用戶授權(quán)到各主要接口的使用方法等方面介紹微信支付的關(guān)鍵點(diǎn)技術(shù),有需要的小伙伴可以參考下
    2015-08-08
  • C語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解

    C語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java Springboot的目的你知道嗎

    Java Springboot的目的你知道嗎

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢(shì)以及相關(guān)知識(shí)點(diǎn)內(nèi)容,興趣的朋友們可以學(xué)習(xí)參考下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • Spring?boot2.0?實(shí)現(xiàn)日志集成的方法(2)

    Spring?boot2.0?實(shí)現(xiàn)日志集成的方法(2)

    這篇文章主要介紹了Spring?boot2.0?實(shí)現(xiàn)日志集成的方法,上一章講解了spring?boot日志簡(jiǎn)單集成,這篇我們將日志進(jìn)行分類,常規(guī)日志、異常日志、監(jiān)控日志等,需要將日志輸出到不同的文件,具體內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • 使用Mybatis的PageHelper分頁(yè)工具的教程詳解

    使用Mybatis的PageHelper分頁(yè)工具的教程詳解

    這篇文章主要介紹了使用Mybatis的PageHelper分頁(yè)工具的教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java System.setProperty()用法詳解

    Java System.setProperty()用法詳解

    這篇文章主要介紹了Java System.setProperty()用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的操作方法

    mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的操作方法

    這篇文章主要介紹了mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的實(shí)現(xiàn)方法,本文給大家分享兩種方法,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java this關(guān)鍵字的引用詳解

    Java this關(guān)鍵字的引用詳解

    每個(gè)類中都有一個(gè)本類的this引用,類似:類名 this;實(shí)例對(duì)象時(shí),this引用指向?qū)ο蟊旧?,其最主要的作用是讓類中的方法可以訪問(wèn)本類中的另外一個(gè)方法或?qū)傩?,因?yàn)檎{(diào)用一個(gè)方法或?qū)傩?非類方法/屬性)必須要有實(shí)例
    2022-03-03
  • javacv ffmpeg使用原生ffmpeg命令方式

    javacv ffmpeg使用原生ffmpeg命令方式

    在使用javacv集成ffmpeg進(jìn)行視頻處理時(shí),發(fā)現(xiàn)使用ffmpeg-6.0-1.5.9版本出現(xiàn)原生命令執(zhí)行失敗的問(wèn)題,通過(guò)降級(jí)至ffmpeg-5.1.2-1.5.8版本,問(wèn)題得到解決,此外,ffprobe可以用于獲取視頻屬性,需確保視頻片段屬性一致性
    2024-11-11
  • Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)

    Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)

    下面小編就為大家?guī)?lái)一篇Java中==符號(hào)與equals()的使用詳解(測(cè)試兩個(gè)變量是否相等)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論

通榆县| 梁平县| 乌拉特中旗| 德惠市| 侯马市| 神农架林区| 临江市| 茂名市| 大渡口区| 古田县| 边坝县| 镇巴县| 弋阳县| 永平县| 定边县| 普洱| 且末县| 怀仁县| 双鸭山市| 红安县| 新闻| 阳山县| 山东| 拜城县| 秦皇岛市| 大同县| 巴楚县| 易门县| 成都市| 文登市| 常宁市| 宣化县| 大新县| 山东省| 丁青县| 闽清县| 施甸县| 巴彦淖尔市| 兖州市| 平利县| 双辽市|