<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java actuator是什麼,讓我們一起了解一下?
actuator是springboot中的一個附加功能,SpringBoot包含了許多其他特性,可以選擇使用HTTP端點或使用JMX來管理和監視應用程式。審計、健康和度量收集也可以自動應用於應用程式。
考慮是否使用actuator框架的核心因素是什麼?
在應用執行過程中,Apollo伺服器端的配置資訊和例項本地快取的配置資訊並不是時時刻刻都相同的。
因此,我需要能夠通過某種技術手段,可以在需要時準確獲知應用本地的配置資料副本,而不是僅能通過Apollo的protal檢視伺服器端資料。
這就需要actuator的原因!
讓我們來看看actuator具體是什麼。
Spring Boot提供了名稱為spring-boot-starter-actuator的starters。
在官方文件中是這樣介紹的:
Starter for using Spring Boot’s Actuator which provides production ready features to help you monitor and manage your application
其實也不難理解,讓我們實戰操作一下。
首先,定義一個SchemaEndpoint類。當然,得用@Endpoint註解來標註這個類,還要再提供一個使用@ReadOperation標註的方法:
@Endpoint(id = "schema")public class SchemaEndpoint { protected ApolloConverterFactory factory; public SchemaEndpoint(ApolloConverterFactory factory) { this.factory = factory; } @ReadOperation public SchemaDescriptor schema() { return new SchemaDescriptor(factory.getSchemaList(), factory.getGroups()); } public static final class SchemaDescriptor { protected Properties schemaList; protected Map<String, Properties> groups; public SchemaDescriptor(@Nullable Properties schemaList, Map<String, Properties> groups) { this.schemaList = schemaList; this.groups = groups; } @Nullable public Properties getSchemaList() { return this.schemaList; } @Nullable public Map<String, Properties> getGroups() { return this.groups; } }}
這裡面的ApolloConverterFactory是基於Apollo本地快取的配置資訊建立資料轉換器的工廠類。它的getSchemaList方法,返回的是sec.insight.schema.list這個namespace的本地快取資料,getGroups返回的是每一組schema的配置集合清單。
然後,再來編寫一個配置類:
@Configuration@ConditionalOnExpression("${apollo.boostrap.enabled:true} && ${spring.apollo.schema.enabled:true}")public class ApolloSchemaConfiguration { @Bean public ApolloConverterFactory apolloConverterFactory() { return new ApolloConverterFactory(); } @Bean @ConditionalOnMissingBean @ConditionalOnEnabledEndpoint(endpoint = SchemaEndpoint.class) public SchemaEndpoint schemaEndpoint(ApolloConverterFactory factory) { return new SchemaEndpoint(factory); }}
最後直接測試就可以了。