java actuator是什么,讓我們一起了解一下?
actuator是springboot中的一個(gè)附加功能,SpringBoot包含了許多其他特性,可以選擇使用HTTP端點(diǎn)或使用JMX來管理和監(jiān)視應(yīng)用程序。審計(jì)、健康和度量收集也可以自動應(yīng)用于應(yīng)用程序。
考慮是否使用actuator框架的核心因素是什么?
在應(yīng)用運(yùn)行過程中,Apollo服務(wù)器端的配置信息和實(shí)例本地緩存的配置信息并不是時(shí)時(shí)刻刻都相同的。
因此,我需要能夠通過某種技術(shù)手段,可以在需要時(shí)準(zhǔn)確獲知應(yīng)用本地的配置數(shù)據(jù)副本,而不是僅能通過Apollo的protal查看服務(wù)器端數(shù)據(jù)。
這就需要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
其實(shí)也不難理解,讓我們實(shí)戰(zhàn)操作一下。
首先,定義一個(gè)SchemaEndpoint類。當(dāng)然,得用@Endpoint注解來標(biāo)注這個(gè)類,還要再提供一個(gè)使用@ReadOperation標(biāo)注的方法:
@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?groups; ? ????????public?SchemaDescriptor(@Nullable?Properties?schemaList,?Map ?groups)?{ ????????????this.schemaList?=?schemaList; ????????????this.groups?=?groups; ????????} ? ????????@Nullable?public?Properties?getSchemaList()?{ ????????????return?this.schemaList; ????????} ? ????????@Nullable?public?Map ?getGroups()?{ ????????????return?this.groups; ????????} ????} }
這里面的ApolloConverterFactory是基于Apollo本地緩存的配置信息創(chuàng)建數(shù)據(jù)轉(zhuǎn)換器的工廠類。它的getSchemaList方法,返回的是sec.insight.schema.list這個(gè)namespace的本地緩存數(shù)據(jù),getGroups返回的是每一組schema的配置集合清單。
然后,再來編寫一個(gè)配置類:
@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); ????} }
最后直接測試就可以了。
以上就是小編今天的分享了,希望可以幫助到大家。