SpringBoot的Actuator监控

Actuator:对系统的监控

  • 是SpringBoot提供的对应用系统监控的集成功能,可以对系统进行配置查看,相关功能统计等,在Spring Cloud中,主要完成微服务的监控,可以查看微服务之间的数据处理和调用,当出现异常时,可以快速定位问题所在

  • 其功能和Dubbo的监控中心类似,区别就是一个需要专门部署,而这个是存在每一个Boot工程中的

这个我之前没了解过,下面上代码

<!--SpringBoot的 Actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

application.properties

server:
port: 8082
management:
server:
port: 9999
endpoints:
web:
base-path: /test

然后我们启动项目,准备访问 :http://localhost:9999/test/health

  

自定义info

默认开启的是 health和 info 两个节点,下面我们在配置文件中自定义info数据,通过监控终端进行查看

spplication.yml中定义以下数据进行测试

info:
#自定义数据,随便取值
username: laodaye
urlhttps: //www.baidu.com
#获取pom.xml文件中读取相应值,固定格式
project:
groupId: @project.groupId@
artifactId: @project.artifactId@
version: @project.version@
name: @project.name@

然后我们进行访问测试:http://localhost:9999/test/info

  

其他监控端点的开放与关闭

之前我们就说到监控系统默认开启的是health和info两个端点,我们可以手动开启其他端点

修改配置文件application如下

management:
server:
port: 9999
endpoints:
web:
base-path: /test
exposure:
#开放所有的监控终端,在yml中*为关键字,需要我们手动双引号引起来
include: "*"

开放了所有端点后,我们就必须得知道有哪些端点,每个端点监控的内容又是什么?

HTTP方法 路径 描述 鉴权
  GET   /autoconfig   查看自动配置的使用情况 true
  GET   /configprops 查看配置属性,包括默认配置 true
  GET   /beans 查看bean及其关系列表 true
  GET   /dump 获取线程活动的快照,打印线程栈 true
  GET   /env 查看所有环境变量 true
  GET   /env/{name} 查看具体变量值 true
  GET   /health 查看应用健康指标 false
  GET   /info 获取自定义信息,这些信息由info打头 false
  GET   /mappings 查看所有url映射 true
  GET   /metrics 查看应用基本指标 true
  GET   /metrics/{name} 查看指定名称的应用的程序度量值 true
  POST   /shutdown 关闭应用,{要求endpoints.shutdown.enable设置为true} true
  GET   /trace 提供基本的http请求跟踪信息{时间戳,http头...} true

mappings端点:可以查看到当前项目中所有URL和处理器的映射关系,详细到处理器方法和对应的映射规则我们就访问几个比较有用的端点进行测试一下:作用与上面对应

  

我的处理器写的夜比较简单,参考参考

  

还有一些其他的端点比如 :beans、env...可按照上面对应进行测试

玩到这里,我们开启了全部的终端,如果我们想关闭某个指定的终端如何操作呢?

management:
server:
port: 9999
endpoints:
web:
base-path: /test
exposure:
#开放所有的监控终端,在yml中*为关键字,需要我们手动双引号引起来
include: "*"
#单独关闭某一个监控终端
exclude: env

当我们再次访问的时候就是 404 了,当然其他开放的终端还是可访问的

  

SpringBoot中使用redis

基础环境

一般我们使用redis作为缓存服务器使用,在获取数据时,先从redis中获取数据,获取到数据则返回,若是没有获取到数据,则去数据库查询,并在得到查询结果后,将结果缓存到redis中,如果对数据一致性的要求比较高,我们还应该设置较短的缓存有效时间

加入依赖

  

修改主配置文件

  

然后即使,我们要讲实体类缓存到redis中,这其中涉及到序列化和反序列化,需要实体类需要实现序列化接口Serializable接口

使用注解方式使用 redis

  • 在工程入口类上开启 @EnableCaching注解,开启缓存功能

  • 在查询方法上添加@Cacheable注解,指定key、指定缓存空间

  • 在增删该上添加@CacheEvict注解,指定缓存空间或者key、allEntries属性指定为true方法调用后,立即清除缓存

  • 在主配置文件中注册缓存空间名称

使用API方式使用 redis

  • 在导入整合包以后,我们就可以导入模版了,模版的key和value要求类型相同,一般我们设为Obj,通用性好,还可以为String

  • 在Service中通过模版对象获取到redis操作对象,然后对redis数据进行操作

  • 为了避免热点key问题,一般要手动使用手段避免意外发生,下面为使用使用双重检测锁解决热点缓存问题

  

至于操作redis的话,可以看看我写得另一篇文章:https://www.cnblogs.com/msi-chen/p/10719083.html

读取自定义配置

可以读取主配置文件中的数据,也可以读取自定义配置文件中的属性

Java方式的属性注入

  • PS : 创建一个jdbc.properties文件

    • jdbc.driverClassName=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://127.0.0.1:3306/test
      jdbc.username=root
      jdbc.password=root
  • 然后编写代码如下,用一个类来装属性 :
    • @Configuration
      @PropertySource("classpath:jdbc.properties",encoding="UTF-8")
      public class JdbcConfig {
      @Value("${jdbc.url}")
      String url;
      @Value("${jdbc.driverClassName}")
      String driverClassName;
      @Value("${jdbc.username}")
      String username;
      @Value("${jdbc.password}")
      String password; @Bean
      public DataSource dataSource() {
      DruidDataSource dataSource = new DruidDataSource();
      dataSource.setUrl(url);
      dataSource.setDriverClassName(driverClassName);
      dataSource.setUsername(username);
      dataSource.setPassword(password);
      return dataSource;
      }
      }
  • 解读为:
    • @Configuration :声明我们 JdbcConfig 是一个配置类
      @PropertySource :指定属性文件的路径是: classpath:jdbc.properties
      通过 @Value 为属性注入值
      通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的
      返回值加入Spring容器中。
      然后我们就可以在任意位置通过 @Autowired 注入DataSource了。

  需要注意的就是:这种方式只能读取properties文件,不能读取yml文件

SpringBoot的属性注入

  • 上面的通过@Value方式注入属性的方式不够强大,只能注入基本类型值

  • SpringBoot提供了一种新的注入方式,支持基本上数据类型和复杂数据类型的注入

想要读取这样的自定义属性,我们定义一个Student对象来装属性, 提供相应属性和get,set

  • 我们创建一个类用来作为属性注入的目标 :
  • @ConfigurationProperties(prefix = "jdbc")
    public class JdbcProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    // ... 略
    // getters 和 setters
    }
  • @ConfigurationProperties(prefix = "jdbc") : 声明当前类为属性读取类
  • 这里值得注意的就是,这种方式没有指定要读取的配置文件,SpringBoot默认读取application.properties,所有需要将配置文件名改一下
  • 其次就是配置文件中的属性名不一定得和类中的字段名一致,支持驼峰、下划线、中划线,
  • 还支持对象引导,比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。

要使用这些属性的时候:

  @Configuration
  @EnableConfigurationProperties(JdbcProperties.class)
  public class JdbcConfig {
    @Bean
    public DataSource dataSource(JdbcProperties jdbc) {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(jdbc.getUrl());
    dataSource.setDriverClassName(jdbc.getDriverClassName());
    dataSource.setUsername(jdbc.getUsername());
    dataSource.setPassword(jdbc.getPassword());
    return dataSource;
    }
  }

然后你可以通过以下方式注入JdbcProperties:

  //@Autowired注入
  @Autowired
  private JdbcProperties prop;

构造函数注入

  private JdbcProperties prop;
  public JdbcConfig(Jdbcproperties prop){
  this.prop = prop;

声明有@Bean的方法参数注入

  @Bean
  public Datasource dataSource(JdbcProperties prop){
  // ...

我们这里采用的是第三种,直接在方法参数中注入

更优雅的注入

  • 如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直
    接在需要的地方声明即可,如下 :

  • @Configuration
    public class JdbcConfig {
    @Bean
    // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    return dataSource;
    }
    }
  • 直接把 @ConfigurationProperties(prefix = "jdbc") 声明在需要使用的 @Bean 的方法上,然后
    SpringBoot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:
    该类必须有对应属性的set方法!

SpringBoot入门到出家的更多相关文章

  1. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  2. SpringBoot入门基础

    目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...

  3. SpringBoot入门示例

    SpringBoot入门Demo SpringBoot可以说是Spring的简化版.配置简单.使用方便.主要有以下几种特点: 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简 ...

  4. Spring全家桶系列–[SpringBoot入门到跑路]

    //本文作者:cuifuan Spring全家桶————[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...

  5. springboot入门之一:环境搭建(续)

    在上篇博客中从springboot的入门到运行一个springboot项目进行了简单讲述,详情请查看“springboot入门之一”.下面继续对springboot做讲述. 开发springboot测 ...

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

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

  7. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  8. SpringBoot入门(五)——自定义配置

    本文来自网易云社区 大部分比萨店也提供某种形式的自动配置.你可以点荤比萨.素比萨.香辣意大利比萨,或者是自动配置比萨中的极品--至尊比萨.在下单时,你并没有指定具体的辅料,你所点的比萨种类决定了所用的 ...

  9. SpringBoot入门(四)——自动配置

    本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...

随机推荐

  1. POJ 2135 /// 最小费用流最大流 非负花费 BellmanFord模板

    题目大意: 给定一个n个点m条边的无向图 求从点1去点n再从点n回点1的不重叠(同一条边不能走两次)的最短路 挑战P239 求去和回的两条最短路很难保证不重叠 直接当做是由1去n的两条不重叠的最短路 ...

  2. 【POJ】1679 The Unique MST

    题目链接:http://poj.org/problem?id=1679 题意:给你一组数据,让你判断是否是唯一的最小生成树. 题解:这里用的是kuangbin大佬的次小生成树的模板.直接判断一下次小生 ...

  3. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...

  4. 案例-开门效果CSS3

    <style> .door { width: 288px; height: 153px; border: 2px solid #333; margin: 150px auto; backg ...

  5. rest_framework 认证组件 权限组件

    认证组件 权限组件 一.准备内容 # models class User(models.Model): name = models.CharField(max_length=32) pwd = mod ...

  6. docker commit为什么不适合生成镜像?

    要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录与容器存储层里.而Docker提供了一个docker commit 的命令,可以将容器的存储层保存下来成为镜像.换句 ...

  7. Linux 错误: $'\r': command not found

    是linux无法解析$'\r'.这其实是windows与linux系统的差异导致的. 因为linux上的换行符为\n,而windows上的换行符为\r\n.所以脚本到linux上就无法解析了. 通常的 ...

  8. 欧拉定理、欧拉函数、a/b%c

    怕忘了…… 欧拉函数 定义.证明.打表方法 欧拉定理 定义.证明 https://blog.csdn.net/zzkksunboy/article/details/73061013 剩余系.完系.简系 ...

  9. Delphi StringGrid常用属性和常用操作

    StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控制网格外观念的属性,以及利用表格的结构响应用户操作的事 ...

  10. SCOI 2014 省选总结

    总的来说作为高一党,去做省选难度的题完全就是去玩的,还是找惯例起身跪hja. 跪毕,看看自己惨不忍睹的成绩,我只想说:电子坑大为什么day1的暴力只有10分!为什么呢?我笑看题面: 方伯伯种玉米,方伯 ...