赞
踩
Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。
列举一些主要的endpoints :
根据上面表格,鉴权为false的,表示不敏感,可以随意访问,否则就是做了一些保护,不能随意访问。
endpoints.mappings.sensitive=false
这样需要对每一个都设置,比较麻烦。敏感方法默认是需要用户拥有ACTUATOR角色,因此,也可以设置关闭安全限制:
management.security.enabled=false
我们可以通过http实现对应用的监控和管理,在pom.xml中增加下面依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
其他的端点大家自己测试吧!!
shutdown
shutdown端点默认是关闭的,我们可以在application.properties中开启:
endpoints.shutdown.enabled=true
shutdown端点不支持GET提交,用POST方式访问http://localhost:8080/shutdown;
控制台效果:
定制端点一般通过endpoints+端点名+属性名来设置,每段之间用.隔开。
1:修改端点
endpoints.beans.id=mybeans
此时访问地址变为http://localhost:8080/mybeans;
2:开启端点
endpoints.shutdown.enabled=true
3:关闭端点
endpoints.beans.enabled=false
关闭端点后访问404:
4:只开启所需端点
若只开启所需端点的话,我们可以通过关闭所有的端点,然后再开启所需端点来实现:
endpoints.enabled=false
endpoints.beans.enabled=true //只开启beans端点,访问其它端点皆为404
5:定制端点访问路径
management.context-path=/manage
此时访问路径就为:http://localhost:8080/manage/env;
6:定制端点访问端口
当我们基于安全的考虑,不暴露端点的端口到外部时,就需要应用本身的业务端口和端点所用的端口使用不同的端口:
management.port=8081
此时访问路径就为:http://localhost:8081/env;
7:关闭http端点
management.port=-1
此时访问所有端点皆为404;
当Spring Boot提供的端点不能满足我们特殊的需求,而我们又需要对特殊的应用状态进行监控的时候,就需要自定义一个端点:
StatusService.java
@Service
public class StatusService { //此类无任何特别,仅为改变status的值
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
StatusEndPoint.java
//通过@ConfigurationProperties的设置,我们可以在application.properties中通过endpoints.status配置我们的端点 @ConfigurationProperties(prefix = "endpoints.status", ignoreUnknownFields = false) //继承AbstractEndpoint类,它是Endpoint接口的抽象实现,当前类一定要重写invoke方法 public class StatusEndPoint extends AbstractEndpoint<String> implements ApplicationContextAware{ //实现ApplicationContextAware接口可以让当前类对Spring容器的资源有意识,即可访问容器的资源 ApplicationContext context; public StatusEndPoint() { super("status"); } @Override public String invoke() { //重写invoke方法,返回我们要监控的内容 StatusService statusService = context.getBean(StatusService.class); return "The Current Status is :"+statusService.getStatus(); } @Override public void setApplicationContext(ApplicationContext arg0) throws BeansException { this.context = arg0; } }
DemoApplication.java
@SpringBootApplication @RestController public class DemoApplication { @Autowired StatusService statusService; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } //注册端点的Bean @Bean public Endpoint<String> status() { Endpoint<String> status = new StatusEndPoint(); return status; } //改变status的状态 @RequestMapping("/change") public String changeStatus(String status){ statusService.setStatus(status); return "OK"; } }
访问:http://localhost:8080/status
访问:http://localhost:8080/change?status=running,改变status的值:
再次访问:http://localhost:8080/status
Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring Boot 内置了一些 HealthIndicator。
定制自己的HealthIndicator只需要一个实现HealthIndicator接口的类,并注册为Bean即可:
StatusHealth.java
@Component
public class StatusHealth implements HealthIndicator {//实现HealthIndicator接口,并重写health方法
@Autowired
StatusService statusService;
@Override
public Health health() {
String status = statusService.getStatus();
if(status == null||!status.equals("running")){
return Health.down().withDetail("Error", "Not Running").build(); //当status的值为非running时构造失败
}
return Health.up().build(); //其余情况运行成功
}
}
运行测试:
访问:http://localhost:8080/health
修改status的值为running,访问:http://localhost:8080/change?status=running
再次访问:http://localhost:8080/health
我们也可以通过JMX对应用进行监控和管理;
在控制台调用java内置的jconsole来实现JMX监控:
打开jconsole页面,选择当前程序的进程:
监控内存、线程、CPU占用率等:
在MBean标签的org.springframework.boot域下可对我们的程序进行监控和管理:
参考书籍:Spring Boot实战
以上只是学习所做的笔记,以供日后参考!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。