Spring Boot Actuator(官网文档解读)

定义        

        Spring Boot Actuator 是 Spring Boot 提供的一个用于监控和管理应用程序的模块。它能够提供各种生产级别的功能,如健康检查、度量指标收集、配置属性查看等,帮助开发者了解应用的内部状态并进行故障排查。

Actuator 引入

        要启用 Actuator 的功能,只需在项目的依赖中加入 spring-boot-starter-actuator 即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

自定义Actuator的地址和端口

        默认情况下,Actuator 的 HTTP 端口和应用的主 HTTP 端口是一样的。不过,在实际的生产环境中,你可能需要让 Actuator 端点监听不同的端口或者网络地址,以此增强系统的安全性与可管理性。

自定义端口

  • 我们可以通过如下配置进行对actuator模块访问端口的自定义:

server:
  port: 8091

# 开启所有默认Web端点

management:
  server:
    port: 8891
  • 我们的项目的端口是8091,但是访问/actuator 端点的端口是8891

自定义访问地址

  • 我们可以通过如下配置自定义actuator 模块的访问地址:

management:
  server:
    port: 8891
    address: 127.2.2.1
  • 现在我们访问/actuator端点的地址改为:http://127.2.2.1:8891/actuator

自定义敏感信息处理

        在 Spring Boot 应用里,对敏感信息(如密码、密钥等)进行清理(Sanitization)是保障数据安全的重要手段。默认情况下,Spring Boot 会对一些常见的敏感信息进行清理,但在实际项目中,你可能需要根据具体需求对清理逻辑进行自定义。下文将详细介绍如何通过定义 SanitizingFunction Bean 来自定义敏感信息的清理过程。

核心概念

  • SanitizingFunctionSanitizingFunction 是一个函数式接口,用于定义敏感信息的清理逻辑。你可以创建实现该接口的类,并将其注册为 Spring Bean,Spring Boot 会在需要清理敏感信息时调用这些函数。

  • SanitizableDataSanitizableData 类包含了需要清理的数据的相关信息,如键(key)、值(value)以及数据来源的 PropertySource。通过这些信息,你可以实现更精细的清理策略,例如针对特定 PropertySource 中的所有值进行清理。

  • 执行顺序:多个 SanitizingFunction 会按照注册顺序依次执行,直到其中一个函数修改了 SanitizableData 中的值,后续的函数将不再执行。

代码示例

1. 创建自定义的 SanitizingFunction 实现类

import org.springframework.boot.actuate.endpoint.SanitizableData;
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
import org.springframework.core.env.PropertySource;

public class CustomSanitizingFunction implements SanitizingFunction {

    @Override
    public SanitizableData apply(SanitizableData data) {
        String key = data.getKey();
        String value = data.getValue();
        PropertySource<?> propertySource = data.getPropertySource();

        // 示例 1:对包含 "password" 或 "secret" 的键对应的值进行清理
        if (key != null && (key.contains("password") || key.contains("secret"))) {
            return data.withValue("******");
        }

        // 示例 2:对特定 PropertySource 中的所有值进行清理
        if (propertySource != null && "MySpecialPropertySource".equals(propertySource.getName())) {
            return data.withValue("CUSTOM_SANITIZED");
        }

        // 如果不需要清理,返回原始数据
        return data;
    }
}

        在上述代码中,CustomSanitizingFunction 实现了 SanitizingFunction 接口的 apply 方法。在该方法中,首先获取 SanitizableData 中的键、值和 PropertySource。然后根据不同的条件对值进行清理:

  • 若键包含 "password" 或 "secret",将值替换为 "******"。

  • PropertySource 的名称为 "MySpecialPropertySource",将值替换为 "CUSTOM_SANITIZED"。

  • 若不满足上述条件,则返回原始数据。

 2.将自定义的 SanitizingFunction 注册为 Spring Bean

        为了让 Spring Boot 能够使用自定义的 SanitizingFunction,需要将其注册为 Spring Bean。可以通过创建一个配置类来实现:

import org.springframework.boot.actuate.endpoint.SanitizingFunction;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SanitizationConfig {

    @Bean
    public SanitizingFunction customSanitizingFunction() {
        return new CustomSanitizingFunction();
    }
}

        在上述代码中,SanitizationConfig 是一个配置类,使用 @Configuration 注解标记。在该类中,通过 @Bean 注解将 CustomSanitizingFunction 实例注册为 Spring Bean。

3. 测试自定义的清理功能

        在完成上述步骤后,你可以启动 Spring Boot 应用,并访问相关的 Actuator 端点(如 /actuator/env)来验证自定义的清理功能是否生效。

Actuator 集成 JMX

  • Java管理扩展(JMX)提供了监控和管理应用程序的标准机制。默认情况下,Spring Boot 并不会启用此功能。您可以通过将spring.jmx.enabled配置属性设置为true来启用它。SpringBoot将使用SpringJMX注释标记合适的MBeanServer,公开ID为MBeanServer的bean。

spring:
  jmx:
    enabled: true
  • spring.jmx.enabled仅影响 Spring 提供的管理 bean。启用其他库(例如Log4J2或Quartz)提供的管理 bean 是独立的。

Spring Boot-JMX 相关注解

@ManagedResource

        该注解的作用是把一个类标记为 JMX MBean。借助这个注解,能让该类成为可被 JMX 代理管理的资源。

  • 属性:

    • objectName:指定 MBean 的对象名,该名称在 JMX 代理中需保持唯一。

    • description:为 MBean 提供简要描述。

  • 代码示例:

mport org.springframework.jmx.export.annotation.ManagedResource;

@ManagedResource(objectName = "com.example:type=MyManagedResource", description = "This is a managed resource.")
public class MyManagedResource {
    // 类的具体实现
}

        上述代码中,MyManagedResource 类被标记成了 JMX MBean,其对象名是 com.example:type=MyManagedResource,并且有相应的描述信息。

@ManagedAttribute

        该注解用于把类的某个属性(通常是 getter 和 setter 方法)暴露成 JMX MBean 的属性,这样就能在 JMX 代理中对该属性进行读取和修改操作。

  • 属性:

    • description:为属性提供简要描述。

    • currencyTimeLimit:设定属性值的有效时间,单位为秒。

  • 代码示例

import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;

@ManagedResource(objectName = "com.example:type=MyManagedResource")
public class MyManagedResource {
    private String myAttribute;

    @ManagedAttribute(description = "This is a managed attribute.")
    public String getMyAttribute() {
        return myAttribute;
    }

    @ManagedAttribute
    public void setMyAttribute(String myAttribute) {
        this.myAttribute = myAttribute;
    }
}

        在上述代码里,myAttribute 属性借助 @ManagedAttribute 注解被暴露成了 JMX MBean 的属性,可在 JMX 代理中对其进行读取和设置操作。

@ManagedOperation

        这个注解用于把类的某个方法暴露成 JMX MBean 的操作,从而可以在 JMX 代理中调用该方法。

  • 属性:

    • description:为操作提供简要描述。

    • impact:表明操作的影响,可取值为 INFOACTIONACTION_INFO 或 UNKNOWN

  • 代码示例

import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;

@ManagedResource(objectName = "com.example:type=MyManagedResource")
public class MyManagedResource {
    @ManagedOperation(description = "This is a managed operation.", impact = javax.management.MBeanOperationInfo.ACTION)
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

        在上述代码中,doSomething 方法通过 @ManagedOperation 注解被暴露成了 JMX MBean 的操作,能够在 JMX 代理中调用该方法。

自定义MBean 名称

  • MBean 的名称通常由id端点的 生成。如果您的应用程序包含多个 Spring ApplicationContext,您可能会发现名称冲突。为了解决这个问题,您可以将spring.jmx.unique-names属性设置为true,以便 MBean 名称始终唯一。

  • 您还可以自定义端点所暴露的 JMX 域。以下是 application.yml的配置示例:

spring:
  jmx:
    unique-names: true
management:
  endpoints:
    jmx:
      domain: "com.example.myapp"

禁用JMX 相关端点

  • 如果您不想通过 JMX 公开端点,则可以将management.endpoints.jmx.exposure.exclude属性设置为*,如以下示例所示:

management:
  endpoints:
    jmx:
      exposure:
        exclude: "*"

Java-JMX 学习相关

        关于Java-JMX 的详细学习内容,可以参考下列文章:

Java-JMX (官网文档解读)_java jmx-CSDN博客
Java-JMX 组件架构即详解-CSDN博客Java-JMX (官网文档解读)_java jmx-CSDN博客

Spring Boot Actuator 集成 Micrometer

        Spring Boot Actuator 集成 Micrometer(官网文档解读)-CSDN博客

Spring Boot  Actuator EndPoints

        Spring Boot Actuator EndPoints(官网文档解读)-CSDN博客

参考文献

Actuator :: Spring Boot

Monitoring and Management over JMX :: Spring Boot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保姆级教程Docker部署Zookeeper模式的Kafka镜像

目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、命令运行容器 3、Compose运行容器 4、查看运行状态 5、验证功能 四、部署可视化工具 1、创建挂载目录 2、Compose运行容器 3、查看运行状态 一、安装Docker及可视化工…

【力扣】279.完全平方数

AC截图 题目 思路 总结动态规划方程得出的思路 找到最小子问题&#xff0c;涉及到当前数和上一个数的跨度&#xff0c;以及上一个数的结果如何变成当前数的结果这两个点。 1&#xff0c;当前数n和上一个数的跨度&#xff1a; 假设n12&#xff0c; 上一个数可以是11&#xff0c…

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤&#xff0c;无需本地部署模型&#xff0c;直接通过官网连接使用&#xff1a;1. 下载并安装OfficeAI插件 &#xff08;1&#xff09;访问OfficeAI插件下载地址&#xff1a;OfficeAI助手 - 免费办公智能AI助手, AI写作&#xff0c;下载…

使用Redis解决使用Session登录带来的共享问题

在学习项目的过程中遇到了使用Session实现登录功能所带来的共享问题&#xff0c;此问题可以使用Redis来解决&#xff0c;也即是加上一层来解决问题。 接下来介绍一些Session的相关内容并且采用Session实现登录功能&#xff08;并附上代码&#xff09;&#xff0c;进行分析其存在…

【目标检测】模型验证:K-Fold 交叉验证

K-Fold 交叉验证 1、引言1.1 K 折交叉验证概述 2、配置2.1 数据集2.2 安装包 3、 实战3.1 生成物体检测数据集的特征向量3.2 K 折数据集拆分3.3 保存记录3.4 使用 K 折数据分割训练YOLO 4、总结 1、引言 我们将利用YOLO 检测格式和关键的Python 库&#xff08;如 sklearn、pan…

深度学习系列--04.梯度下降以及其他优化器

目录 一.梯度概念 1.一元函数 2.二元函数 3.几何意义上的区别 二.梯度下降 1.原理 2.步骤 3.示例代码&#xff08;Python&#xff09; 4.不同类型的梯度下降 5.优缺点 三.动量优化器&#xff08;Momentum&#xff09; 适用场景 1.复杂地形的优化问题 2.数据具有噪声的问…

π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当

前言 过去的半个多月 对于大模型 deepseek火爆全球&#xff0c;我对其的解读也写成了整整一个系列 详见《火爆全球的DeepSeek系列模型》&#xff0c;涉及对GRPO、MLA、V3、R1的详尽细致深入的解读 某种意义来讲&#xff0c;deepseek 相当于把大模型的热度 又直接拉起来了——…

导航守卫router.beforeEach

router.beforeEach 是一个全局前置守卫&#xff0c;在每次路由跳转之前都会触发。 //index.jsrouter.beforeEach((to, from, next) > {// 打印即将要进入的目标路由信息console.log(即将要进入的目标路由信息:, to)// 打印当前正要离开的路由信息console.log(当前正要离开的…

[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别

前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中&#xff0c;第三方库的使用是基于项目&#xff08;工程&#xff09;的。具体而言&#xff0c;只有当你为一个特定的项目添加了某个第三方库后&#xff0c;该项目才能使用该库。这些第三方库的文…

了解AI绘图,Stable Diffusion的使用

AI绘图对GPU算力要求较高。 个人电脑配置可参考&#xff1a; CPU&#xff1a;14600kf 盒装 显卡&#xff1a;RTX 4080金属大师 OC&#xff0c;16G显存 主板&#xff1a;z790吹雪d4 内存&#xff1a;芝奇皇家戟4000c18,162G 硬盘&#xff1a;宏基gm7000 1T 散热&#xff1a;追风…

linux环境自动化golang项目启动脚本解析

一.场景介绍 当在本地创建了golang项目,修改了代码功能,怎么在远程测试服务器上更新该功能呢,可以使用下面的步骤来解决该问题(这只是其中一种方法): (1).推送最新代码到远程仓库 (2).在测试服务器上创建该项目并拉取最新代码 (3).创建deploy.sh脚本 (4).运行deploy.sh脚本 二.…

归一化与伪彩:LabVIEW图像处理的区别

在LabVIEW的图像处理领域&#xff0c;归一化&#xff08;Normalization&#xff09;和伪彩&#xff08;Pseudo-coloring&#xff09;是两个不同的概念&#xff0c;虽然它们都涉及图像像素值的调整&#xff0c;但目的和实现方式截然不同。归一化用于调整像素值的范围&#xff0c…

基于DeepSeek API和VSCode的自动化网页生成流程

1.创建API key 访问官网DeepSeek &#xff0c;点击API开放平台。 在开放平台界面左侧点击API keys&#xff0c;进入API keys管理界面&#xff0c;点击创建API key按钮创建API key&#xff0c;名称自定义。 2.下载并安装配置编辑器VSCode 官网Visual Studio Code - Code Editing…

Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)

感谢您点开这篇文章:D&#xff0c;鼠鼠我是一个代码小白&#xff0c;下文是学习开源项目Open WebUI过程中的一点笔记记录&#xff0c;希望能帮助到你&#xff5e; 本人菜鸟&#xff0c;持续成长&#xff0c;能力不足有疏漏的地方欢迎一起探讨指正&#xff0c;比心心&#xff5e…

SSM仓库物品管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码&#xff1a;2.保存物品信息代码&#xff1a;3.删除仓库信息代码&#xff1a; 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SSM框架开发的仓库…

Python微博动态爬虫

本文是刘金路的《语言数据获取与分析基础》第十章的扩展&#xff0c;详细解释了如何利用Python进行微博爬虫&#xff0c;爬虫内容包括微博指定帖子的一级评论、评论时间、用户名、id、地区、点赞数。 整个过程十分明了&#xff0c;就是用户利用代码模拟Ajax请求&#xff0c;发…

时序数据库:Influxdb详解

文章目录 一、简介1、简介2、官网 二、部署1、安装2、配置&#xff08;1&#xff09;用户初始化 三、入门&#xff08;Web UI&#xff09;1、加载数据&#xff08;1&#xff09;上传数据文件&#xff08;2&#xff09;代码接入模板 2、管理存储桶&#xff08;1&#xff09;创建…

unity学习32:角色相关1,基础移动控制

目录 0 应用商店 1 角色上新增CharacterController 组件 1.1 角色上新增CharacterController 组件 1.2 如果没有这个则会报错 2 速度 2.1 默认速度&#xff0c;按帧率计算 2.2 修改速度为按时间计算 2.3 movespeed&#xff0c;基础是1米/秒&#xff0c;这个就是每 move…

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好&#xff01; 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…

mysql8.0使用pxc实现高可用

环境准备 准备三台虚拟机&#xff0c;其对应的主机名和IP地址为 pxc-1192.168.190.129pxc-2192.168.190.133pxc-3192.168.190.134 解析,都要做解析 测试 下载pxc的安装包&#xff0c; 官网&#xff1a;https://www.percona.com/downloads 选择8.0的版本并下载&#xff0c;…