弹簧启动执行器教程
朋友您好,在本教程中,我們將學(xué)習(xí)彈簧執(zhí)行器及其所有功能。
1.什么是彈簧執(zhí)行器?
2.如何在Maven項(xiàng)目或Gradle項(xiàng)目中添加彈簧執(zhí)行器?
3.創(chuàng)建一個具有Spring Actuator依賴項(xiàng)的Spring Boot項(xiàng)目。
4.使用彈簧執(zhí)行器端點(diǎn)監(jiān)視應(yīng)用程序。
什么是彈簧執(zhí)行器?
一旦您開發(fā)了應(yīng)用程序并將其部署到生產(chǎn)環(huán)境中,就必須檢查已啟動并正在運(yùn)行的應(yīng)用程序的運(yùn)行狀況,這一點(diǎn)非常重要,特別是對于像銀行應(yīng)用程序這樣的關(guān)鍵任務(wù)應(yīng)用程序(如果需要面向客戶的應(yīng)用程序)下降,將直接影響銀行業(yè)務(wù)。
以傳統(tǒng)的方式,在使用Spring Actuator之前,我們需要編寫代碼來檢查應(yīng)用程序的運(yùn)行狀況,但是使用Spring Actuator,我們不需要編寫任何用于運(yùn)行狀況檢查的代碼,但是Spring Actuator提供了一些現(xiàn)成的端點(diǎn),可以對于應(yīng)用程序的健康檢查非常有用。
如何在Maven項(xiàng)目或Gradle項(xiàng)目中添加彈簧執(zhí)行器?
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> </dependencies> dependencies {compile("org.springframework.boot:spring-boot-starter-actuator") }創(chuàng)建一個具有Spring Actuator依賴項(xiàng)的Spring Boot項(xiàng)目
讓我們繼續(xù)并使用Spring Initializer https://start.spring.io/創(chuàng)建一個具有Spring Actuator依賴項(xiàng)(與Web和DevTools一起使用)的Spring Boot項(xiàng)目。
請注意,在撰寫本教程時,Spring Boot版本為2.1.0。
在Eclipse或您選擇的任何其他IDE中導(dǎo)入項(xiàng)目,然后運(yùn)行SpringActuatorApplication.java。
您將在Eclipse控制臺中看到以下內(nèi)容:
這表明嵌入式Tomcat已在端口8080上啟動,而SpringActuatorApplication已在Tomcat上啟動。 同樣在控制臺日志中,您可以看到執(zhí)行器端點(diǎn)通過/ actuator URI公開。
018-11-09 20:00:29.346 INFO 8338 — [restartedMain] osbwembedded.tomcat.TomcatWebServer:Tomcat在端口上啟動:8080(http),具有上下文路徑“
2018-11-09 20:00:29.354 INFO 8338 — [restartedMain] nbjsSpringActuatorApplication:在9.273秒內(nèi)啟動了SpringActuatorApplication(JVM運(yùn)行11.823)
2018-11-09 20:00:29.190INFO 8338 — [restartedMain] osbaeweb.EndpointLinksResolver:在基本路徑“ / actuator”下暴露2個端點(diǎn)。
使用彈簧執(zhí)行器端點(diǎn)監(jiān)視應(yīng)用
如上所述,Spring執(zhí)行器提供了一些現(xiàn)成的端點(diǎn),可用于監(jiān)視應(yīng)用程序的運(yùn)行狀況。
| ID | 描述 |
| 審核事件 | 公開當(dāng)前應(yīng)用程序的審核事件信息。 |
| 豆子 | 顯示應(yīng)用程序中所有Spring Bean的完整列表。 |
| 快取 | 公開可用的緩存。 |
| 條件 | 顯示在配置和自動配置類上評估的條件以及它們匹配或不匹配的原因。 |
| configprops | 顯示所有@ConfigurationProperties的整理列表。 |
| 環(huán)保 | 從Spring的ConfigurableEnvironment中公開屬性。 |
| 飛路 | 顯示已應(yīng)用的所有Flyway數(shù)據(jù)庫遷移。 |
| 健康 | 顯示應(yīng)用程序運(yùn)行狀況信息。 |
| httptrace | 顯示HTTP跟蹤信息(默認(rèn)情況下,最近100個HTTP請求-響應(yīng)交換)。 |
| 信息 | 顯示任意應(yīng)用程序信息。 |
| 整合圖 | 顯示Spring Integration圖。 |
| 記錄器 | 顯示和修改應(yīng)用程序中記錄器的配置。 |
| 液基 | 顯示已應(yīng)用的所有Liquibase數(shù)據(jù)庫遷移。 |
| 指標(biāo) | 顯示當(dāng)前應(yīng)用程序的“指標(biāo)”信息。 |
| 映射 | 顯示所有@RequestMapping路徑的整理列表。 |
| 計(jì)劃任務(wù) | 顯示應(yīng)用程序中的計(jì)劃任務(wù)。 |
| 會議 | 允許從Spring Session支持的會話存儲中檢索和刪除用戶會話。 使用Spring Session對反應(yīng)式Web應(yīng)用程序的支持時不可用。 |
| 關(guān)掉 | 使應(yīng)用程序正常關(guān)閉。 |
| 線程轉(zhuǎn)儲 | 執(zhí)行線程轉(zhuǎn)儲。 |
啟用端點(diǎn)
默認(rèn)情況下,除關(guān)機(jī)外的所有端點(diǎn)均處于啟用狀態(tài)。 要啟用端點(diǎn),請?jiān)赼pplication.properties文件中使用以下屬性。
management.endpoint.<id>.enabled例:
要啟用關(guān)閉端點(diǎn),我們需要在application.properties文件中進(jìn)行以下輸入:
management.endpoint.shutdown.enabled=true或者,我們可以禁用所有端點(diǎn),然后有選擇地啟用所需的端點(diǎn)。 使用以下配置,將禁用除info之外的所有端點(diǎn)。
management.endpoints.enabled-by-default=falsemanagement.endpoint.info.enabled=true端點(diǎn)執(zhí)行器
讓我們點(diǎn)擊URL http:// localhost:8080 / actuator并查看端點(diǎn)。
注意 :我使用Postman來測試端點(diǎn),因?yàn)樗越Y(jié)構(gòu)良好的格式顯示JSON。 您可以自由使用任何其他此類工具,也可以僅使用瀏覽器。
在Spring Actuator中公開端點(diǎn)
正如您已經(jīng)注意到的,在這里只能看到運(yùn)行狀況和信息端點(diǎn)。 這是因?yàn)檫@些是默認(rèn)情況下唯一公開的端點(diǎn)。 出于安全原因,默認(rèn)情況下不會公開所有端點(diǎn),因?yàn)樗鼈兛赡芫哂幸恍┟舾行畔?#xff0c;因此可能會受到威脅。
暴露特定端點(diǎn)
如果要通過Web(Http)公開其他端點(diǎn),則需要在application.properties文件中進(jìn)行以下輸入。
management.endpoints.web.exposure.include= <Comma separated list of Ids of endpoints which we want to expose>例
management.endpoints.web.exposure.include= health,info,env現(xiàn)在,在application.properties中添加以上條目之后,讓我們再次命中URL http:// localhost:8080 / actuator。
正如我們在下面的屏幕截圖中看到的那樣,env端點(diǎn)也已啟用。
公開所有端點(diǎn)
如果要啟用所有端點(diǎn),可以在application.properties中使用通配符*,如下所示。
management.endpoints.web.exposure.include=*
公開所有端點(diǎn),只有少數(shù)端點(diǎn)除外
下面的兩個條目將啟用所有端點(diǎn),但僅禁用環(huán)境端點(diǎn)。
management.endpoints.web.exposure.include=*management.endpoints.web.exposure.exclude=env
禁用HTTP端點(diǎn)
如果您不想通過HTTP公開端點(diǎn),可以通過在application.properties中配置以下內(nèi)容來完成:
management.server.port=-1或者,您可以在application.properties中配置以下內(nèi)容:
management.endpoints.web.exposure.exclude=*自定義執(zhí)行器URL以訪問各種端點(diǎn)
默認(rèn)情況下,所有Web終結(jié)點(diǎn)在/ actuator下都可用,其URL格式為/ actuator / {id}。
但是,可以通過在application.properties中配置以下屬性來配置基本路徑/執(zhí)行器。
management.endpoints.web.base-path 例如,如果要將基本URL設(shè)置為/ monitor而不是/ actuator,則可以
可以在application.properties中進(jìn)行如下配置:
這樣,可以將所有端點(diǎn)作為/ monitor / {id}而不是/ actuator / {id}進(jìn)行訪問
Spring Boot執(zhí)行器端點(diǎn)
讓我們討論一些最重要的端點(diǎn)。
/健康
運(yùn)行狀況端點(diǎn)將提供應(yīng)用程序的狀態(tài)(如果應(yīng)用程序已啟動且未運(yùn)行)。 這對于在生產(chǎn)中監(jiān)視應(yīng)用程序的運(yùn)行狀況非常重要。 該端點(diǎn)可以與監(jiān)視應(yīng)用程序集成在一起,并且在告知應(yīng)用程序的實(shí)時運(yùn)行狀況方面將非常有幫助。
健康資訊
健康終結(jié)點(diǎn)將公開多少信息取決于application.properties文件中屬性management.endpoint.health.show-details的配置。
如果management.endpoint.health.show-details = never,則永遠(yuǎn)不會顯示詳細(xì)信息。 在這種情況下,您只會看到以下信息。 這也是默認(rèn)行為。
如果management.endpoint.health.show-details = always,則向所有用戶顯示詳細(xì)信息。因此,如下面的響應(yīng)所示,我們也具有磁盤空間信息。 如果您的應(yīng)用程序已連接到數(shù)據(jù)庫,那么您還將獲得有關(guān)數(shù)據(jù)庫運(yùn)行狀況的信息。
如果management.endpoint.health.show-details =何時授權(quán) ,則僅向授權(quán)用戶顯示詳細(xì)信息。可以使用management.endpoint.health.roles屬性配置授權(quán)角色。
自動配置的健康指標(biāo)
Spring Boot Actuator具有許多自動配置的HeathIndicators,用于檢查應(yīng)用程序各個部分的運(yùn)行狀況。 例如,Spring Boot Actuator提供了DiskspaceHealthIndicator,它提供有關(guān)應(yīng)用程序使用的磁盤空間的運(yùn)行狀況的信息。 同樣,如果您使用的是MongoDB,則MongoHealthIndicator將檢查Mongo DB的運(yùn)行狀況(是否為UP),并顯示相關(guān)信息。 默認(rèn)情況下,最終應(yīng)用程序狀態(tài)是由HealthAggregator派生的,它基本上根據(jù)狀態(tài)的有序列表對每個HealthIndicator的狀態(tài)進(jìn)行排序。 排序列表中的第一個狀態(tài)用作應(yīng)用程序的最終狀態(tài)。
禁用所有自動配置的運(yùn)行狀況指示器
這些運(yùn)行狀況指示器默認(rèn)情況下處于啟用狀態(tài),但是可以使用以下屬性將其禁用:
management.health.defaults.enabled=false禁用各個自動配置的運(yùn)行狀況指示器
或者,也可以如下禁用單個HealthIndicator,例如,禁用磁盤空間的運(yùn)行狀況檢查:
management.health.diskspace.enabled=false 注意 :任何HealthIndicator的標(biāo)識符將是不帶有HealthIndicator后綴的Bean的名稱。
例如 :
等等…
自定義健康指標(biāo)
連同Spring Boot Actuator提供的內(nèi)置HealthIndicators,我們還可以創(chuàng)建自己的自定義Health Indicator。 為此,您需要創(chuàng)建一個實(shí)現(xiàn)HealthIndicator接口并實(shí)現(xiàn)其health()方法的類,并通過以下相關(guān)信息返回Health作為響應(yīng):
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component;@Component public class CustomHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code.// int errorCode = performHealthCheck();if (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}}現(xiàn)在讓我們再次達(dá)到運(yùn)行狀況終結(jié)點(diǎn),看看我們的自定義運(yùn)行狀況指示器是否得到反映。
正如我們在上面的屏幕快照中看到的那樣,自定義運(yùn)行狀況檢查已包括在內(nèi)。
每個組件的健康狀況
還可以檢查單個組件的運(yùn)行狀況。 在上面的示例中,我們看到了自定義健康狀態(tài)以及diskSpace健康狀態(tài)。
如果只想查看diskSpace運(yùn)行狀況,則可以執(zhí)行以下操作:
http:// localhost:8080 / actuator / health / diskSpace
/信息
info終結(jié)點(diǎn)提供了有關(guān)應(yīng)用程序的一般信息,該應(yīng)用程序是從諸如build-info.properties或git.properties之類的文件中獲取的,或者是從application.properties中關(guān)鍵信息下的任何屬性獲取的。
就像在我們的項(xiàng)目中一樣,沒有這樣的文件,因此,如果我們點(diǎn)擊info端點(diǎn),它將僅顯示空響應(yīng),如下所示:
如果存在META-INF / build-info.properties文件,Spring Boot Actuator將顯示與構(gòu)建相關(guān)的信息。 build-info目標(biāo)使用項(xiàng)目坐標(biāo)和構(gòu)建時間來生成此類文件。 它還允許您添加任意數(shù)量的其他屬性。
讓我們在spring-boot-maven-plugin插件中,在我們項(xiàng)目的pom.xml中添加一個build-info目標(biāo)。
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.0.RELEASE</version><executions><execution><goals><goal>build-info</goal></goals><configuration><additionalProperties><encoding.source>UTF-8</encoding.source><encoding.reporting>UTF-8</encoding.reporting><java.source>${maven.compiler.source}</java.source><java.target>${maven.compiler.target}</java.target></additionalProperties></configuration></execution></executions></plugin>現(xiàn)在讓我們再次點(diǎn)擊信息端點(diǎn),我們可以看到如下構(gòu)建信息:
另外,我們可以在application.properties的info鍵下添加應(yīng)用程序信息,如下所示,它們將顯示在/ info端點(diǎn)中。
info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT
/豆子
bean端點(diǎn)為Spring bean容器中定義的所有bean提供有關(guān)每個bean的以下信息:
aliases? : Names of any aliases Scope? ?: Scope of bean type? ? ? : Fully qualified type of a bean. resource : Resource(class) in which bean is defined. dependencies :names of dependent beans.例如,我創(chuàng)建了一個名稱為TestController.java的RestController,并注入了一個名稱為TestService.java的bean。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class TestController {@Autowiredprivate TestService testService;@GetMapping("/messages")public String getMessage() {return "Hello";} }import org.springframework.context.annotation.Configuration;@Configuration public class TestService {}您可以在下面的ID為testController的屏幕截圖中看到它的反映方式。
/ configprops
configProps端點(diǎn)為您提供了所有帶有@ConfigurationProperties注釋的bean。
在上面的屏幕截圖中,我們可以看到在Spring框架本身中預(yù)定義的兩個bean,并用@ConfigurationProperties注釋,因此顯示在此端點(diǎn)下。
下面的屏幕快照顯示了HttpTraceProperties的源代碼,該代碼以@ConfigurationProperties注釋。
/ env
env端點(diǎn)按以下順序?yàn)槟峁┧刑囟ㄓ诃h(huán)境的信息:
System Properties? ? ? ? ? ? ? ? ? ? ?- JVM specific(Platform Independent) System Env. or Env. Variables? - Operating System specific(Platform Dependent) application level configuration - Defined in application.properties
/堆轉(zhuǎn)儲
heapdump端點(diǎn)提供了來自應(yīng)用程序JVM的堆轉(zhuǎn)儲。 該端點(diǎn)以HPROF格式返回二進(jìn)制數(shù)據(jù)。 由于返回的數(shù)據(jù)通常很大,因此您應(yīng)該保存并進(jìn)行分析。
/記錄器
loggers端點(diǎn)提供應(yīng)用程序的記錄器以及它們的configureLevel,effectiveLevel(如果此記錄器的配置級別為null,并且其父級也為配置級別,則有效級別將為根記錄器的記錄器級別)。
levels屬性告訴日志記錄框架支持哪些所有級別。
特定記錄器的記錄器信息
要獲取特定記錄器的記錄器信息,請?jiān)? loggers端點(diǎn)后面的URL中傳遞記錄器的名稱/ ID,如下所示:
http:// localhost:8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication
指標(biāo)終結(jié)點(diǎn)為您提供了可以為應(yīng)用程序跟蹤的所有指標(biāo)。
檢查單個指標(biāo)
您可以通過將特定指標(biāo)傳遞到/ metrics端點(diǎn)之后的URL來跟蹤單個指標(biāo),如下所示:
http:// localhost:8080 / actuator / metrics / jvm.memory.used
一切都在Spring Actuator上,感謝閱讀。 請與他人分享,您認(rèn)為這可能會有所幫助。
翻譯自: https://www.javacodegeeks.com/2018/11/spring-boot-actuator-tutorial.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 商混备案证有效期多长时间(商混备案证)
- 下一篇: activiti自定义_在Activit