说明
本编是学习actuator的第二篇, 逐步对actuator 的认识做一个记录分享.
主要对actuator中的conditions的一个认识.(基于第一篇执行)
springboot2前: 端点的自动化配置信息获取地址是 /autoconfig
官方改动说明: /autoconfig-->Renamed to /conditions
springboot2后: 获取地址 /actuator/conditions
以上都是无自定义的默认访问.
该端点用来获取应用的自动化配置, 其中包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因.
------------------------------------------------------
访问
http://localhost:8081/actuator/conditions
获取的信息只展示部分,太长了,如下:
{
contexts: {
application: {
positiveMatches: {
PageHelperAutoConfiguration: [
{
condition: "OnBeanCondition",
message: "@ConditionalOnBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found beans 'sqlSessionFactorCat', 'sqlSessionFactorDog'"
}
]
},
negativeMatches: {
ElasticsearchHealthIndicatorAutoConfiguration.ElasticsearchClientHealthIndicatorConfiguration: {
notMatched: [
{
condition: "OnClassCondition",
message: "@ConditionalOnClass did not find required class 'org.elasticsearch.client.Client'"
}
],
matched: [ ]
},
},
unconditionalClasses: [
"org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration"
]
}
}
}
对于以上返回的信息, 参数说明:
contexts | Object | Application contexts keyed by id. |
positiveMatches | Object | condition匹配的类和方法. |
condition | String | condition名字. |
message | String | condition对应详细说明. |
negativeMatches | Object | condition不匹配的类和方法 |
notMatched | Array | conditions的条件. |
matched | Array | conditions的条件. |
unconditionalClasses | Array | 无条件自动配置类的名称(如果有的话) |
补充说明
记录关于@Condition* 的一系列注解, 标注在类或方法上面,表示@Bean会启用配置
引用巨人的解释:
Spring框架还提供了很多@Condition给我们用,当然总结用语哪种好理解,看给位读者喽
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)
@ConditionalOnClass:该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类;
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。
官方actuator文档说明: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/actuator-api/html/
--------------------------------------------------------