https://www.cnblogs.com/duanxz/p/3508267.html
前言
接着上一篇《Springboot Actuator之一:執行器Actuator入門介紹》actuator的介紹,繼續深挖actuator中關於監控方面的特性。
Spring Boot包含很多其他的特性,它們可以幫你監控和管理發布到生產環境的應用。你可以選擇使用HTTP端點,JMX或遠程shell(SSH或Telnet)來管理和監控應用。審計(Auditing),健康(health)和數據采集(metrics gathering)會自動應用到你的應用。
執行器HTTP端點僅適用於基於Spring MVC的應用程序。
介紹
Metrics基本上是成熟公司里面必須做的一件事情,簡單點來說就是對應用的監控,之前在一些技術不成熟的公司其實是不了解這種概念,因為業務跟技術是相關的 當業務龐大起來,技術也會相對復雜起來,對這些復雜的系統進行監控就存在必要性了,特別是在soa化的系統中,完整一個軟件的功能分布在各個系統中,針對這些功能進行監控就更必要了 而Spring Boot Actuator 提供了metrics service,讓監控變得統一化了,方便管理
開啟production-ready特性
spring-boot-actuator模塊提供了Spring Boot所有的production-ready特性。啟用該特性的最簡單方式就是添加對spring-boot-starter-actuator ‘Starter POM’的依賴。
執行器(Actuator)的定義:執行器是一個制造業術語,指的是用於移動或控制東西的一個機械裝置。一個很小的改變就能讓執行器產生大量的運動。
基於Maven的項目想要添加執行器只需添加下面的’starter’依賴:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
端點
執行器端點允許你監控應用及與應用進行交互。Spring Boot包含很多內置的端點,你也可以添加自己的。例如,health端點提供了應用的基本健康信息。
端點暴露的方式取決於你采用的技術類型。大部分應用選擇HTTP監控,端點的ID映射到一個URL。例如,默認情況下,health端點將被映射到/health。
下面的端點都是可用的:
ID | 描述 | 敏感(Sensitive) |
---|---|---|
autoconfig | 顯示一個auto-configuration的報告,該報告展示所有auto-configuration候選者及它們被應用或未被應用的原因 | true |
beans | 顯示一個應用中所有Spring Beans的完整列表 | true |
configprops | 顯示一個所有@ConfigurationProperties的整理列表 | true |
dump | 執行一個線程轉儲 | true |
env | 暴露來自Spring ConfigurableEnvironment的屬性 | true |
health | 展示應用的健康信息(當使用一個未認證連接訪問時顯示一個簡單的’status’,使用認證連接訪問則顯示全部信息詳情) | false |
info | 顯示任意的應用信息 | false |
metrics | 展示當前應用的’指標’信息 | true |
mappings | 顯示一個所有@RequestMapping路徑的整理列表 | true |
shutdown | 允許應用以優雅的方式關閉(默認情況下不啟用) | true |
trace | 顯示trace信息(默認為最新的一些HTTP請求) | true |
如果您使用Spring MVC,還可以使用以下附加端點:
ID | 描述 | 敏感默認值 |
---|---|---|
docs | 顯示Actuator端點的文檔,包括示例請求和響應。需要spring-boot-actuator-docs在類路徑上 | false |
heapdump | 返回GZip壓縮hprof堆轉儲文件。 | true |
jolokia | 通過HTTP暴露JMX bean(當Jolokia在類路徑上時)。--《Spring Boot Actutaur + Telegraf + InFluxDB + Grafana 構建監控平台》 | true |
logfile | 返回日志文件的內容(if logging.file或logging.path屬性已設置)。支持使用HTTP Range標頭來檢索部分日志文件的內容。 | true
|
根據端點是如何暴露的,該sensitive屬性可以用作安全提示。例如,敏感端點在通過HTTP訪問時將需要用戶名/密碼(或者如果Web安全性未啟用,則簡單地禁用)。
健康信息
健康信息可以用來檢查應用的運行狀態。它經常被監控軟件用來提醒人們生產系統是否停止。health端點暴露的默認信息取決於端點是如何被訪問的。對於一個非安全,未認證的連接只返回一個簡單的’status’信息。對於一個安全或認證過的連接其他詳細信息也會展示
健康信息是從你的ApplicationContext中定義的所有HealthIndicator beans收集過來的。Spring Boot包含很多auto-configured的HealthIndicators,你也可以寫自己的。
安全與HealthIndicators
HealthIndicators返回的信息常常性質上有點敏感。例如,你可能不想將數據庫服務器的詳情發布到外面。因此,在使用一個未認證的HTTP連接時,默認只會暴露健康狀態(health status)。如果想將所有的健康信息暴露出去,你可以把endpoints.health.sensitive設置為false。
為防止’拒絕服務’攻擊,Health響應會被緩存。你可以使用endpoints.health.time-to-live屬性改變默認的緩存時間(1000毫秒)。
自動配置的HealthIndicators
下面的HealthIndicators會被Spring Boot自動配置(在合適的時候):
名稱 | 描述 |
---|---|
DiskSpaceHealthIndicator | 低磁盤空間檢測 |
DataSourceHealthIndicator | 檢查是否能從DataSource獲取連接 |
MongoHealthIndicator | 檢查一個Mongo數據庫是否可用(up) |
RabbitHealthIndicator | 檢查一個Rabbit服務器是否可用(up) |
RedisHealthIndicator | 檢查一個Redis服務器是否可用(up) |
SolrHealthIndicator | 檢查一個Solr服務器是否可用(up) |
可以使用該management.health.defaults.enabled 屬性來禁用它們。
編寫自定義HealthIndicators
想提供自定義健康信息,你可以注冊實現了HealthIndicator接口的Spring beans。你需要提供一個health()方法的實現,並返回一個Health響應。Health響應需要包含一個status和可選的用於展示的詳情。
import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class MyHealth implements HealthIndicator { @Override public Health health() { int errorCode = check(); // perform some specific health check if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } }
除了Spring Boot預定義的Status類型,Health也可以返回一個代表新的系統狀態的自定義Status。在這種情況下,需要提供一個HealthAggregator接口的自定義實現,或使用management.health.status.order屬性配置默認的實現。
例如,假設一個新的,代碼為FATAL的Status被用於你的一個HealthIndicator實現中。為了配置嚴重程度,你需要將下面的配置添加到application屬性文件中:
management.health.status.order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP
如果使用HTTP訪問health端點,你可能想要注冊自定義的status,並使用HealthMvcEndpoint進行映射。例如,你可以將FATAL映射為HttpStatus.SERVICE_UNAVAILABLE。
info
應用程序信息顯示從InfoContributor您定義的所有bean 收集的各種信息 ApplicationContext。Spring Boot包括一些自動配置 InfoContributors,您也可以自己編寫。
自動配置的InfoContributors
以下內容InfoContributors由Spring Boot自動配置:
以下內容InfoContributors由Spring Boot自動配置:
名稱 | 描述 |
---|---|
EnvironmentInfoContributor | 從鑰匙Environment下方隱藏任何info鑰匙。 |
GitInfoContributor | 如果git.properties文件可用,則顯示git 信息。 |
BuildInfoContributor | 如果META-INF/build-info.properties文件可用,則顯示構建信息。 |
自定義應用信息信息
通過設置Spring屬性info.*,你可以定義info端點暴露的數據。所有在info關鍵字下的Environment屬性都將被自動暴露。例如,你可以將下面的配置添加到application.properties:
info.app.name=MyService info.app.description=My awesome service info.app.version=1.0.0
在構建時期自動擴展info屬性
你可以使用已經存在的構建配置自動擴展info屬性,而不是對在項目構建配置中存在的屬性進行硬編碼。這在Maven和Gradle都是可能的。
使用Maven自動擴展屬性
對於Maven項目,你可以使用資源過濾來自動擴展info屬性。如果使用spring-boot-starter-parent,你可以通過@..@占位符引用Maven的’project properties’。
project.artifactId=myproject project.name=Demo project.version=X.X.X.X project.description=Demo project for info endpoint info.build.artifact=@project.artifactId@ info.build.name=@project.name@ info.build.description=@project.description@ info.build.version=@project.version@
注:在上面的示例中,我們使用project.*來設置一些值以防止由於某些原因Maven的資源過濾沒有開啟。Maven目標spring-boot:run直接將src/main/resources添加到classpath下(出於熱加載的目的)。這就繞過了資源過濾和自動擴展屬性的特性。你可以使用exec:java替換該目標或自定義插件的配置,具體參考plugin usage page。
如果你不使用starter parent,在你的pom.xml你需要添加(處於元素內):
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
和(處於內):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <configuration> <delimiters> <delimiter>@</delimiter> </delimiters> </configuration> </plugin>
Git提交信息
info端點的另一個有用特性是,當項目構建完成后,它可以發布關於你的git源碼倉庫狀態的信息。如果在你的jar中包含一個git.properties文件,git.branch和git.commit屬性將被加載。
對於Maven用戶,spring-boot-starter-parent POM包含一個能夠產生git.properties文件的預配置插件。只需要簡單的將下面的聲明添加到你的POM中:
<build> <plugins> <plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> </plugin> </plugins> </build>
基於HTTP的監控和管理
果你正在開發一個Spring MVC應用,Spring Boot執行器自動將所有啟用的端點通過HTTP暴露出去。默認約定使用端點的id作為URL路徑,例如,health暴露為/health。
保護敏感端點
如果你的項目中添加的有Spring Security,所有通過HTTP暴露的敏感端點都會受到保護。默認情況下會使用基本認證(basic authentication,用戶名為user,密碼為應用啟動時在控制台打印的密碼)。
你可以使用Spring屬性改變用戶名,密碼和訪問端點需要的安全角色。例如,你可能會在application.properties中添加下列配置:
security.user.name=admin security.user.password=secret management.security.role=SUPERUSER
自定義管理服務器的上下文路徑
有時候將所有的管理端口划分到一個路徑下是有用的。例如,你的應用可能已經將/info作為他用。你可以用management.contextPath屬性為管理端口設置一個前綴:
management.context-path=/manage
上面的application.properties示例將把端口從/{id}改為/manage/{id}(比如,/manage/info)。
自定義管理服務器的端口
對於基於雲的部署,使用默認的HTTP端口暴露管理端點(endpoints)是明智的選擇。然而,如果你的應用是在自己的數據中心運行,那你可能傾向於使用一個不同的HTTP端口來暴露端點。
management.port屬性可以用來改變HTTP端口:
management.port=8081
由於你的管理端口經常被防火牆保護,不對外暴露也就不需要保護管理端點,即使你的主要應用是安全的。在這種情況下,classpath下會存在Spring Security庫,你可以設置下面的屬性來禁用安全管理策略(management security):
management.security.enabled=false
(如果classpath下不存在Spring Security,那也就不需要顯示的以這種方式來禁用安全管理策略,它甚至可能會破壞應用程序。)
自定義管理服務器的地址
你可以通過設置management.address屬性來定義管理端點可以使用的地址。這在你只想監聽內部或面向生產環境的網絡,或只監聽來自localhost的連接時非常有用。
下面的application.properties示例不允許遠程管理連接:
management.port=8081 management.address=127.0.0.1
配置特定於管理的SSL
配置為使用自定義端口時,管理服務器也可以使用各種management.ssl.*屬性配置自己的SSL 。例如,這允許管理服務器通過HTTP可用,而主應用程序使用HTTPS:
server.port = 8443 server.ssl.enabled = true server.ssl.key-store = classpath:store.jks server.ssl.key-password = secret management.port = 8080 management.ssl.enable = false
或者,主服務器和管理服務器都可以使用SSL,但使用不同的密鑰存儲:
server.port = 8443 server.ssl.enabled = true server.ssl.key-store = classpath:main.jks server.ssl.key-password = secret management.port = 8080 management.ssl.enable = true management.ssl。 key-store = classpath:management.jks management.ssl.key-password = secret
禁用HTTP端點
如果不想通過HTTP暴露端點,你可以將管理端口設置為-1: management.port=-1
HTTP Health端點訪問限制
通過health端點暴露的信息根據是否為匿名訪問而不同。默認情況下,當匿名訪問時,任何有關服務器的健康詳情都被隱藏了,該端點只簡單的指示服務器是運行(up)還是停止(down)。此外,當匿名訪問時,響應會被緩存一個可配置的時間段以防止端點被用於’拒絕服務’攻擊。endpoints.health.time-to-live屬性被用來配置緩存時間(單位為毫秒),默認為1000毫秒,也就是1秒。
上述的限制可以被禁止,從而允許匿名用戶完全訪問health端點。想達到這個效果,可以將endpoints.health.sensitive設為false。
度量指標(Metrics)
Spring Boot執行器包括一個支持’gauge’和’counter’級別的度量指標服務。’gauge’記錄一個單一值;’counter’記錄一個增量(增加或減少)。同時,Spring Boot提供一個PublicMetrics接口,你可以實現它,從而暴露以上兩種機制不能記錄的指標。具體參考SystemPublicMetrics。
所有HTTP請求的指標都被自動記錄,所以如果點擊metrics端點,你可能會看到類似以下的響應:
{ "counter.status.200.root": 20, "counter.status.200.metrics": 3, "counter.status.200.star-star": 5, "counter.status.401.root": 4, "gauge.response.star-star": 6, "gauge.response.root": 2, "gauge.response.metrics": 3, "classes": 5808, "classes.loaded": 5808, "classes.unloaded": 0, "heap": 3728384, "heap.committed": 986624, "heap.init": 262144, "heap.used": 52765, "mem": 986624, "mem.free": 933858, "processors": 8, "threads": 15, "threads.daemon": 11, "threads.peak": 15, "uptime": 494836, "instance.uptime": 489782, "datasource.primary.active": 5, "datasource.primary.usage": 0.25 }
此處我們可以看到基本的memory,heap,class loading,processor和thread pool信息,連同一些HTTP指標。在該實例中,root(‘/’),/metrics URLs分別返回20次,3次HTTP 200響應。同時可以看到root URL返回了4次HTTP 401(unauthorized)響應。雙asterix(star-star)來自於被Spring MVC /**匹配到的一個請求(通常為一個靜態資源)。
gauge級別展示了一個請求的最后響應時間。所以,root的最后請求被響應耗時2毫秒,/metrics耗時3毫秒。
對 /metrics
接口提供的信息進行簡單分類如下表:
分類 | 前綴 | 報告內容 |
---|---|---|
垃圾收集器 | gc.* | 已經發生過的垃圾收集次數,以及垃圾收集所耗費的時間,適用於標記-清理垃圾收集器和並行垃圾收集器(數據源自java.lang.management. GarbageCollectorMXBean) |
內存 | mem.* | 分配給應用程序的內存數量和空閑的內存數量(數據源自java.lang. Runtime) |
堆 | heap.* | 當前內存用量(數據源自java.lang.management.MemoryUsage) |
類加載器 | classes.* | JVM類加載器加載與卸載的類的數量(數據源自java.lang. management.ClassLoadingMXBean) |
系統 | processors、instance.uptime、uptime、systemload.average | 系統信息,例如處理器數量(數據源自java.lang.Runtime)、運行時間(數據源自java.lang.management.RuntimeMXBean)、平均負載(數據源自java.lang.management.OperatingSystemMXBean) |
線程池 | thread.* | 線程、守護線程的數量,以及JVM啟動后的線程數量峰值(數據源自 java.lang .management.ThreadMXBean) |
數據源 | datasource.* | 數據源連接的數量(源自數據源的元數據,僅當Spring應用程序上下文里存在 DataSource Bean 的時候才會有這個信息) |
Tomcat 會話 | httpsessions.* | Tomcat的活躍會話數和最大會話數(數據源自嵌入式Tomcat的Bean,僅在使用嵌入式Tomcat服務器運行應用程序時才有這個信息) |
HTTP | counter.status._、gauge.response._ | 多種應用程序服務HTTP請求的度量值與計數器 |
解釋說明:
-
請注意,這里的一些度量值,比如數據源和Tomcat會話,僅在應用程序中運行特定組件時才有數據。你還可以注冊自己的度量信息。
-
HTTP的計數器和度量值需要做一點說明。counter.status 后的值是HTTP狀態碼,隨后是所請求的路徑。舉個例子,counter.status.200.metrics 表明/metrics端點返回 200(OK) 狀態碼的次數。
-
HTTP的度量信息在結構上也差不多,卻在報告另一類信息。它們全部以gauge.response 開頭,,表明這是HTTP響應的度量信息。前綴后是對應的路徑。度量值是以毫秒為單位的時間,反映了最近處理該路徑請求的耗時。
-
這里還有幾個特殊的值需要注意。root路徑指向的是根路徑或/。star-star代表了那些Spring 認為是靜態資源的路徑,包括圖片、JavaScript和樣式表,其中還包含了那些找不到的資源。這就是為什么你經常會看到 counter.status.404.star-star,這是返回了HTTP 404 (NOT FOUND) 狀態的請求數。
-
/metrics
接口會返回所有的可用度量值,但你也可能只對某個值感興趣。要獲取單個值,請求時可以在URL后加上對應的鍵名。例如,要查看空閑內存大小,可以向/metrics/mem.free
發一 個GET請求。例如訪問:http://localhost:8088/monitor/metrics/mem.free
,返回:{"mem.free":178123}
。
系統指標
Spring Boot暴露以下系統指標:
- 系統內存總量(mem),單位:Kb
- 空閑內存數量(mem.free),單位:Kb
- 處理器數量(processors)
- 系統正常運行時間(uptime),單位:毫秒
- 應用上下文(就是一個應用實例)正常運行時間(instance.uptime),單位:毫秒
- 系統平均負載(systemload.average)
- 堆信息(heap,heap.committed,heap.init,heap.used),單位:Kb
- 線程信息(threads,thread.peak,thead.daemon)
- 類加載信息(classes,classes.loaded,classes.unloaded)
- 垃圾收集信息(gc.xxx.count, gc.xxx.time)
數據源指標
Spring Boot會為你應用中定義的支持的DataSource暴露以下指標:
- 最大連接數(datasource.xxx.max)
- 最小連接數(datasource.xxx.min)
- 活動連接數(datasource.xxx.active)
- 連接池的使用情況(datasource.xxx.usage)
所有的數據源指標共用datasoure.前綴。該前綴對每個數據源都非常合適:
-
如果是主數據源(唯一可用的數據源或存在的數據源中被@Primary標記的)前綴為datasource.primary
-
如果數據源bean名稱以dataSource結尾,那前綴就是bean的名稱去掉dataSource的部分(例如,batchDataSource的前綴是datasource.batch)
- 其他情況使用bean的名稱作為前綴
通過注冊一個自定義版本的DataSourcePublicMetrics bean,你可以覆蓋部分或全部的默認行為。默認情況下,Spring Boot提供支持所有數據源的元數據;如果你喜歡的數據源恰好不被支持,你可以添加另外的DataSourcePoolMetadataProvider beans。具體參考DataSourcePoolMetadataProvidersConfiguration。
緩存指標
為應用程序中定義的每個受支持的緩存顯示以下度量標准:
- 當前大小的緩存(cache.xxx.size)
- 命中率(cache.xxx.hit.ratio)
-
比例(cache.xxx.miss.ratio)
緩存提供商不會以一致的方式暴露命中/失誤率。雖然有些暴露了一個聚合值(即自上次統計數據被清除以來的命中率),但是其他人暴露了一個時間值(即最后一秒的命中率)。檢查您的緩存提供程序文檔以獲取更多詳細信息。
如果兩個不同的緩存管理器碰巧定義相同的緩存,則緩存的名稱以CacheManagerbean 的名稱為前綴。
可以通過使用自定義版本注冊一個bean來覆蓋部分或全部默認值CachePublicMetrics。默認情況下,Spring Boot為EhCache,Hazelcast,Infinispan,JCache和Guava提供緩存統計信息。CacheStatisticsProvider如果您最喜歡的緩存庫不支持開箱即可添加其他 bean。參見CacheStatisticsAutoConfiguration例子。
/dump:該端點用來暴露程序運行中的線程信息。
它使用java.lang.management.ThreadMXBean的dumpAllThreads方法來返回所有含有同步信息的活動線程詳情。
/trace:該端點用來返回基本的HTTP跟蹤信息。
默認情況下,跟蹤信息的存儲采用org.springframework.boot.actuate.trace.InMemoryTraceRepository實現的內存方式,始終保留最近的100條請求記錄。
操作控制類
仔細的讀者可能會發現,我們在“初識Actuator”時運行示例的控制台中輸出的所有監控端點,已經在介紹應用配置類端點和度量指標類端點時都講解完了。那么還有哪些是操作控制類端點呢?
實際上,由於之前介紹的所有端點都是用來反映應用自身的屬性或是運行中的狀態,相對於操作控制類端點沒有那么敏感,所以他們默認都是啟用的。
而操作控制類端點擁有更強大的控制能力,如果要使用它們的話,需要通過屬性來配置開啟。在原生端點中,只提供了一個用來關閉應用的端點:/shutdown。我們可以通過如下配置開啟它:
endpoints.shutdown.enabled=true
在配置了上述屬性之后,只需要訪問該應用的/shutdown端點就能實現關閉該應用的遠程操作。
由於開放關閉應用的操作本身是一件非常危險的事,所以真正在線上使用的時候,我們需要對其加入一定的保護機制,比如:定制Actuator的端點路徑、整合Spring Security進行安全校驗等。
Tomcat session指標
如果你使用Tomcat作為內嵌的servlet容器,session指標將被自動暴露出去。 httpsessions.active和httpsessions.max提供了活動的和最大的session數量。
記錄自己的指標
想要記錄你自己的指標,只需將CounterService或GaugeService注入到你的bean中。CounterService暴露increment,decrement和reset方法;GaugeService提供一個submit方法。
下面是一個簡單的示例,它記錄了方法調用的次數:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.CounterService; import org.springframework.stereotype.Service; @Service public class MyService { private final CounterService counterService; @Autowired public MyService(CounterService counterService) { this.counterService = counterService; } public void exampleMethod() { this.counterService.increment("services.system.myservice.invoked"); } }
注:你可以將任何的字符串用作指標的名稱,但最好遵循所選存儲或圖技術的指南。Matt Aimonetti’s Blog中有一些好的關於圖(Graphite)的指南。
添加你自己的公共指標
想要添加額外的,每次指標端點被調用時都會重新計算的度量指標,只需簡單的注冊其他的PublicMetrics實現bean(s)。默認情況下,端點會聚合所有這樣的beans,通過定義自己的MetricsEndpoint可以輕易改變這種情況。
追蹤(Tracing)
對於所有的HTTP請求Spring Boot自動啟用追蹤。你可以查看trace端點,並獲取最近一些請求的基本信息:
[{ "timestamp": 1394343677415, "info": { "method": "GET", "path": "/trace", "headers": { "request": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Connection": "keep-alive", "Accept-Encoding": "gzip, deflate", "User-Agent": "Mozilla/5.0 Gecko/Firefox", "Accept-Language": "en-US,en;q=0.5", "Cookie": "_ga=GA1.1.827067509.1390890128; ..." "Authorization": "Basic ...", "Host": "localhost:8080" }, "response": { "Strict-Transport-Security": "max-age=31536000 ; includeSubDomains", "X-Application-Context": "application:8080", "Content-Type": "application/json;charset=UTF-8", "status": "200" } } } },{ "timestamp": 1394343684465, ... }]
自定義追蹤
如果需要追蹤其他的事件,你可以將一個TraceRepository注入到你的Spring Beans中。add方法接收一個將被轉化為JSON的Map結構,該數據將被記錄下來。
默認情況下,使用的InMemoryTraceRepository將存儲最新的100個事件。如果需要擴展該容量,你可以定義自己的InMemoryTraceRepository實例。如果需要,你可以創建自己的替代TraceRepository實現。
進程監控
在Spring Boot執行器中,你可以找到幾個創建有利於進程監控的文件的類:
- ApplicationPidFileWriter創建一個包含應用PID的文件(默認位於應用目錄,文件名為application.pid)
- EmbeddedServerPortFileWriter創建一個或多個包含內嵌服務器端口的文件(默認位於應用目錄,文件名為application.port)
默認情況下,這些writers沒有被激活,但你可以使用下面描述的任何方式來啟用它們。
擴展屬性
你需要激活META-INF/spring.factories文件里的listener(s):
org.springframework.context.ApplicationListener=\ org.springframework.boot.actuate.system.ApplicationPidFileWriter, org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter
以編程方式
你也可以通過調用SpringApplication.addListeners(…)方法來激活一個監聽器,並傳遞相應的Writer對象。該方法允許你通過Writer構造器自定義文件名和路徑。
--------------------- 本文來自 等風de帆 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/l_sail/article/details/70495601?utm_source=copy