后台开发专题spring boot相关每周1000字

Spring Boot Actuator之定制Actuator

2016-11-19  本文已影响2432人  奋斗的白

1、修改端点ID

每个Actuator端点都是有一个特定的ID用来决定端点的路径。/beans端点的默认ID就是 beans 。端点的路径是由ID决定的, 那么可以通过修改ID来改变端点的路径。 要做的就是设置一个属性,属性名是 endpoints.endpoint-id.id 。
如把/beans改为/beansome:
endpoints.beans.id=beansome
这时要是想查看bean的信息时,路径就由原来的/beans变为/beansome;

2、启用和禁用端点

默认情况下,所有端点(除了/shutdown)都是启用的。
禁用端点所有的端点:
endpoints.enabled=false
禁用某个特定的端点:
endpoints.endpoint-id.enabled=false
注意奥!
禁用后,再次访问URL时,会出现404错误。

3、添加自定义度量信息

3.1 简单的自定义度量信息:

springBoot自动配置Actuator创建CounterService的实例,并将其注册为Spring的应用程序上下文中的Bean。

CounterService这个接口里定义了三个方法分别用来增加、减少或重置特定名称的度量值。

代码如下:

package org.springframework.boot.actuate.metrics;

public interface CounterService {

  void increment(String metricName);

  void decrement(String metricName);

  void reset(String metricName);

}

Actuator的自动配置还会配置一个GaugeService类型的Bean。

代码如下:

package org.springframework.boot.actuate.metrics;

public interface GaugeService {

    void submit(String metricName, double value);

}

自己写的一个实例:

@Controllerpublic class HelloController { 
     @Autowired   
     private CounterService counterService;  
     @Autowired  
     private GaugeService gaugeService;    
     @RequestMapping(value = "/login", method=RequestMethod.GET)   
     public String login() {
        counterService.increment("logintimes:");
        gaugeService.submit("loginLastTime:",System.currentTimeMillis());      
        return "login";   
      }
}

在运行/ metrics时,出现自定义的度量信息。

3.2 相对复杂点的自定义度量信息
 主要是写一个类实现publicMetrics接口,提供自己想要的度量信息。该接口定义了一个metrics()方法,返回一个Metric对象的集合

代码如下:

@Componentpublic 
class CustomMetrics implements PublicMetrics {   
    private ApplicationContext applicationContext;
    @Autowide 
    public CustomMetrics(ApplicationContext applicationContext) {       
       this.applicationContext = applicationContext;   
    } 
    @Override  
    public Collection<Metric<?>> metrics() {    
        List<Metric<?>> metrics = new ArrayList<Metric<?>>();
        metrics.add(new Metric<Long>("spring.startup-date",applicationContext.getStartupDate()));
        metrics.add(new Metric<Integer>("spring.bean.definitions",applicationContext.getBeanDefinitionCount()));
        metrics.add(new Metric<Integer>("spring.beans",applicationContext.getBeanNamesForType(Object.class).length));
        metrics.add(new Metric<Integer>("spring.controllers",applicationContext.getBeanNamesForAnnotation(Controller.class).length));      
        return metrics;  
     }
}

运行结果中可以找到以上自定义的度量信息

"spring.startup-date":1477211367363,
"spring.bean.definitions":317,
"spring.beans":331,
"spring.controllers":3,
4、插入自定义健康指示器
 自定义健康指示器时,需要实现HealthIndicator,重写health()方法即可。调用withDetail()方法向健康记录里添加其他附加信息。有多个附加信息时,可多次调用withDetail()方法,每次设置一个健康记录的附加字段。

示例(关于一个异常的健康指示器)如下:

@Componentpublic 
class CustomHealth implements HealthIndicator{   
 @Override   
 public Health health() {   
     try {        
         RestTemplate restTemplate = new RestTemplate();   
         restTemplate.getForObject("http://localhost:8080/index",String.class);          
         return Health.up().build();      
     }catch (Exception e){      
      return Health.down().withDetail("down的原因:",e.getMessage()).build();     
      }    
  }
}

 运行“http://localhost:8080/health
之后就会出现一些列健康指示。有时候有的浏览器仅仅出现{"status":"DOWN"},为什么会是这样呢?官网给了我们答案

Shows application health information (when the application is secure, a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated)
而且要求Sensitive Default 为flase
上一篇 下一篇

猜你喜欢

热点阅读