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