2.Springboot的Actuator监控自定义健康信息的两种方式
SpringCloud架构系列:github地址:github.com/hellozhaoxu…
/health 端点
该端点用于展示应用的健康信息,里面展示了很多健康信息,例如数据库连接、磁盘信息等等。
这些信息从ApplicationContext中的各种HealthIndicator Beans中收集到的,Spring boot框架中包含了大量的HealthIndicators的实现类。
我们要自定义健康信息,一种方式是实现HealthIndicators,第二种方式是继承 AbstractHealthIndicator 抽象类。
(1) 实现HealthIndicator接口
实现HealthIndicator接口
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class AppHealth1 implements HealthIndicator {
@Override
public Health health() {
return null;
}
}
实现健康信息返回逻辑
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
import java.util.Random;
@Component
public class AppHealth1implements HealthIndicator {
@Override
public Health health() {
int result = checkHealth();
if(result < 5){
// 返回自定义健康信息
return Health.up().withDetail("healthCount", result).withDetail("app-actuator", "up")
.withDetail("message", "服务正常").build();
}
return Health.down().withDetail("healthCount", result).withDetail("app-actuator", "down")
.withDetail("message", "服务故障").build();
}
/**
* checkHealth : 返回0-9任意
*
* @author hellozhaoxudong@163.com
* @date 2019/8/11 11:11
* @param
* @return int
*/
private int checkHealth(){
Random rand = new Random ();
return rand.nextInt(10);
}
}
启动,去/health 端点查看自定义的健康信息
(2) 继承 AbstractHealthIndicator 类
继承 AbstractHealthIndicator 类,创建一个检测器类
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
public class AppHealth2 extends AbstractHealthIndicator{
// 重写检查健康信息逻辑
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
}
}
重写检查健康信息逻辑
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
import java.util.Random;
@Component
public class AppHealth2 extends AbstractHealthIndicator{
// 重写检查健康信息逻辑
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
int result = checkHealth();
// 自定义健康信息
if(result < 5){
builder.up();
builder.withDetail("app-actuator", "up").withDetail("message", "服务正常");
}else{
builder.down();
builder.withDetail("app-actuator", "down").withDetail("message", "服务故障");
}
builder.withDetail("healthCount", result);
}
/**
* checkHealth : 返回0-9任意
*
* @author hellozhaoxudong@163.com
* @date 2019/8/11 11:11
* @param
* @return int
*/
private int checkHealth(){
Random rand = new Random ();
return rand.nextInt(10);
}
}