2019独角兽企业重金招聘Python工程师标准>>>

SpringBoot--Actuator

1. 初识Actuator

在开发过程中,项目被放置到生产服务器上运行时,有可能需要我们全方位的监控应用服务的运行情况。此时SpringBoot提供了Actuator模块进行监控和管理

2. 使用方法

在gradle中添加依赖

compile("org.springframework.boot:spring-boot-starter-actuator")

然后启动项目后会发现在启动中发现如下的输出信息

这些端点信息是暴露在外面的原生信息,例如此时访问http://localhost:8080/health会发现在网站中输出如下信息

SpringBoot2.0中映射的地址是/actuator/health

{"status": "UP","diskSpace": {"status": "UP","total": 250685575168,"free": 172327690240,"threshold": 10485760},"db": {"status": "UP","database": "MySQL","hello": 1}
}

3. 端点介绍

Actuator的端点能够进行监控和管理应用。SpringBoot有许多的内嵌的端点,如果还需要其他的也可以自己添加。例如health端点提供了基本的应用健康信息。

每一个独立的端点都可以进行选择暴露或者不暴露,默认情况下有些端点是开启的,如果不想暴露的话,那么可以在配置文件中进行配置endpoints + . + name,举例如下:

endpoints.env.enabled=false

下面给出几个端点的简单介绍

端点名 描述 是否默认暴露
autoconfig 展示出所有自动配置的报告,展示自动配置的先决条件,并且分段展示出配置成功的和配置失败的,并且展示出原因,其中positiveMatches 是自动化配置成功的,negativeMatches 是自动化配置不成功的 true
beans 该端点用来获取应用上下文中创建的所有Bean true
configprops 展示出来所有@ConfigurationProperties的属性信息 true
dump 暴露出程序运行中的线程信息 true
env 它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置配置、命令行中的参数 true
health 用来获取应用的各类健康指标信息 true
info 该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的json内容。我们可以在application.properties配置文件中通过info前缀来设置一些属性 true
metrics 该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息等 true
mappings 展示出所有的@RequestMapping路径 true
trace 该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用 true

3.1 自定义info端点信息

在添加了Actuator进行访问info端点的时候,我们会发现页面中显示了一个空的json信息。如果想要显示信息的话,那么可以在配置文件中通过设置info.*进行赋值,例如:

info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

这是访问localhost:8080/info可以发现如下信息

{"app": {"java": {"target": "1.8","source": "1.8"},"encoding": "UTF-8"},"name": "BuXueWuShu"
}

4. 自定义端点

有时候自带的端点信息不符合我们的需求,需要我们自定义一些端点信息。在自定义端点信息之前我们需要看一下Endpoint这个SpringBoot中的类。

public interface Endpoint<T> {//暴露在外的Id值,例如health、envString getId();//控制Id信息是否暴露boolean isEnabled();//用于权限的控制boolean isSensitive();//访问Id值返回的信息T invoke();
}

发现暴露出来的端点都是实现了Endpoint这个类,例如trace这个端点。

@ConfigurationProperties(prefix = "endpoints.trace")
public class TraceEndpoint extends AbstractEndpoint<List<Trace>> {private final TraceRepository repository;/*** Create a new {@link TraceEndpoint} instance.* @param repository the trace repository*/public TraceEndpoint(TraceRepository repository) {super("trace");Assert.notNull(repository, "Repository must not be null");this.repository = repository;}@Overridepublic List<Trace> invoke() {return this.repository.findAll();}}

然后发现在spring.factories文件中自动配置了

org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\

点进去以后发现在其中已经自动将默认的端点注入进Spring容器中了

   @Bean@ConditionalOnMissingBean -- 表示在容器中没有此实体Bean时创建public TraceEndpoint traceEndpoint() {return new TraceEndpoint(this.traceRepository == null? new InMemoryTraceRepository() : this.traceRepository);}

因此自定义端点也是类似的原理,我们做个简单的如下:

public class MyEndPoint implements Endpoint {@Overridepublic String getId() {return "buxuewushu";}@Overridepublic boolean isEnabled() {return true;}@Overridepublic boolean isSensitive() {return true;}@Overridepublic Object invoke() {User user=new User();user.setName("不学无数");user.setAddress("HeNan");return user;}
}

将其放入spring.factories自动注入进容器中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.FirstSpringBoot.EndPoint.MyEndPoint

然后启动项目输入localhost:8080/buxuewushu出现以下的信息

{"name": "不学无数","address": "HeNan"
}

5. 参考文章

  • https://www.jianshu.com/p/9fab4e81d7bb
  • http://blog.didispace.com/spring-boot-actuator-1/
  • https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/#production-ready-endpoints

转载于:https://my.oschina.net/u/4030990/blog/2907377

不学无数——SpringBoot入门Ⅷ相关推荐

  1. 不学无数——SpringBoot入门Ⅱ

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot 1.Starters Starters是一套技术,是什么技术呢?是SpringBoot整理出来,人们经常 ...

  2. 不学无数——SpringBoot入门VI

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot 1 连接数据库 Spring框架为连接数据库提供了许多的帮助,从JDBC连接到使用JdbcTemplat ...

  3. SpringBoot入门(二)——起步依赖

    本文来自网易云社区 在前一篇我们通过简单几步操作就生成了一个可以直接运行的Web程序,这是因为SpringBoot代替我们做了许多工作,概括来讲可以分为起步依赖和自动配置.这一篇先来看看起步依赖. 项 ...

  4. springboot 入门教程(4)--web开发(spring mvc和Thymeleaf模板,带源码)

    2019独角兽企业重金招聘Python工程师标准>>> 首先回顾下前几篇的内容:springboot 入门教程(1),springboot 入门教程-Thymeleaf(2), sp ...

  5. 【Java】SpringBoot入门学习及基本使用

    SpringBoot入门及基本使用 SpringBoot的介绍我就不多说了,核心的就是"约定大于配置",接下来直接上干货吧! 本文的实例: github-LPCloud,欢迎sta ...

  6. SpringBoot入门和配置

    一.SpringBoot入门和微服务简介  1.SpringBoot入门 springboot:J2EE一站式解决方案 springcloud:分布式整体解决方案 2.微服务简介    微服务:架构风 ...

  7. 最简单最详细的SpringBoot入门项目——HelloWorld

    最详细的SpringBoot入门项目--HelloWorld 关于SpringBoot的介绍以及优点这里就不说了,想了解的可以直接点击这里 Spring Boot百度百科 接下来我们直奔主题,开始用S ...

  8. SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合

    一.SpringBoot 简介: spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装.所以,你以前可以用spring做的事情,现在用spri ...

  9. springboot 历史版本文档_乘风破浪,SpringBoot入门

    SpringBoot入门篇 前言 在普通的java项目中,大量的xml文件配置起来相当繁琐,导致了开发效率非常低下,整合第三方框架的配置可能会存在冲突问题导致部署效率低,打包方式是将项目打成一个war ...

最新文章

  1. R语言data.table导入数据实战:data.table使用by函数进行数据分组(aggregate)
  2. 游戏 Github Page
  3. android国际化(多语言)
  4. 切换debian8系统语言环境
  5. 【MCtalk直播】全面复盘直播答题,深度剖析产品架构的难点与坑
  6. 十六进制转double
  7. webpack-plugin-webpack.DefinePlugin-应用全局变量,svn-rep-browser
  8. 【大会】延迟还能再低点吗?不能,但也能
  9. 线程故事:Web应用程序中的ThreadLocal
  10. [react] 给组件设置很多属性时不想一个个去设置有什么办法可以解决这问题呢?
  11. 【转】四、关于如何使用软件库的一个技巧-避免重复配置属性表
  12. centos下安装pip时失败:
  13. Java比较器概述即代码讲解实现
  14. 压力、焦虑远远超出全国平均值,近4成程序员心理不健康?
  15. python设计选择题代码_《Python程序的设计》试题库完整
  16. 背包问题1:【SSL】1059.01背包问题——2021-03-10更
  17. 漫谈程序员系列:请区别对待女程序员
  18. oracle求两个字段的日期差
  19. Linux内存memtest,详细讲解 Linux极品内存检测软件 Memtest86
  20. android自动改,【玩机组ROM修改教程】自己修改安卓ROM 刷机包教程

热门文章

  1. c++ io条件状态 的一个例子
  2. C++类中不能定义自身类类型成员变量
  3. x265-bitstream.cpp
  4. linux最基础安装,Linux Nginx最基础的十大安装步骤(2)
  5. java poi 导出excel 数字有问题
  6. SQL语句来查询今天、昨天、7天内、30天的数据,经典!
  7. python课堂整理9---函数1
  8. 分布式缓存 - hash环/一致性hash
  9. 如何在移动端复制到剪切板
  10. git 版本控制系统初学