一文读懂Java中的WebEndpointProperties类(附Demo)

news2024/11/24 18:31:11

目录

  • 前言
  • 1. 基本知识
  • 2. Demo
  • 3. 彩蛋

前言

对于Java的相关知识,推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

1. 基本知识

Spring Boot 的配置类 WebEndpointProperties,用于配置 Web 端点(endpoints)的相关属性

先看其源码类:

package org.springframework.boot.actuate.autoconfigure.endpoint.web;

import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@Configu
rationProperties(prefix = "management.endpoints.web")
public class WebEndpointProperties {

	private final Exposure exposure = new Exposure();

	/**
	 * Base path for Web endpoints. Relative to server.servlet.context-path or
	 * management.server.servlet.context-path if management.server.port is configured.
	 */
	private String basePath = "/actuator";

	/**
	 * Mapping between endpoint IDs and the path that should expose them.
	 */
	private final Map<String, String> pathMapping = new LinkedHashMap<>();

	public Exposure getExposure() {
		return this.exposure;
	}

	public String getBasePath() {
		return this.basePath;
	}

	public void setBasePath(String basePath) {
		Assert.isTrue(basePath.isEmpty() || basePath.startsWith("/"), "Base path must start with '/' or be empty");
		this.basePath = cleanBasePath(basePath);
	}

	private String cleanBasePath(String basePath) {
		if (StringUtils.hasText(basePath) && basePath.endsWith("/")) {
			return basePath.substring(0, basePath.length() - 1);
		}
		return basePath;
	}

	public Map<String, String> getPathMapping() {
		return this.pathMapping;
	}

	public static class Exposure {

		/**
		 * Endpoint IDs that should be included or '*' for all.
		 */
		private Set<String> include = new LinkedHashSet<>();

		/**
		 * Endpoint IDs that should be excluded or '*' for all.
		 */
		private Set<String> exclude = new LinkedHashSet<>();

		public Set<String> getInclude() {
			return this.include;
		}

		public void setInclude(Set<String> include) {
			this.include = include;
		}

		public Set<String> getExclude() {
			return this.exclude;
		}

		public void setExclude(Set<String> exclude) {
			this.exclude = exclude;
		}

	}

}

解读上述源码的大致细节

  • @ConfigurationProperties(prefix = "management.endpoints.web"):注解表明这个类将会绑定以 management.endpoints.web 开头的配置属性
    配置文件(比如 application.propertiesapplication.yml)中,可以设置以 management.endpoints.web 为前缀的属性,Spring Boot 将会自动将这些属性注入到这个类的实例中

  • Exposure 内部静态类:定义 Web 端点的暴露(exposure)策略,包含了两个属性 include 和 exclude,分别表示应该包含哪些端点和排除哪些端点

  • basePath 属性:指定 Web 端点的基本路径,默认值为 "/actuator",所有的端点都会在 "/actuator" 这个路径下暴露。

  • pathMapping 属性:自定义端点的路径映射,可以将端点 ID 映射到自定义的路径上

一般接口的使用方式可以使用配置文件(以下为例子)

management.endpoints.web.base-path=/custom-path
management.endpoints.web.exposure.include=health,info
management.endpoints.web.path-mapping.health=/custom-health

2. Demo

以下Demo为单独test文件下的测试,方便测试类以及接口的使用

import java.util.HashMap;
import java.util.Map;

import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.context.properties.bind.validation.BindValidationException;
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
import org.springframework.util.Assert;

public class test {

    public static void main(String[] args) {
        testBasePathValidation();
        testInvalidBasePathValidation();
    }

    public static void testBasePathValidation() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("management.endpoints.web.base-path", "/actuator");
        properties.put("management.endpoints.web.exposure.include", "health,info");

        try {
            WebEndpointProperties webEndpointProperties = bindProperties(properties);
            System.out.println("Base path: " + webEndpointProperties.getBasePath());
        } catch (BindValidationException e) {
            e.printStackTrace();
        }
    }

    public static void testInvalidBasePathValidation() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("management.endpoints.web.base-path", "actuator");
        properties.put("management.endpoints.web.exposure.include", "health,info");

        try {
            bindProperties(properties);
        } catch (BindValidationException e) {
            System.out.println("Invalid base path validation passed: " + e.getMessage());
        }
    }

    private static WebEndpointProperties bindProperties(Map<String, Object> properties) {
        ConfigurationPropertySource source = new MapConfigurationPropertySource(properties);
        WebEndpointProperties webEndpointProperties = new WebEndpointProperties();
        webEndpointProperties.setBasePath("/actuator");

        webEndpointProperties = new WebEndpointPropertiesBinder().bind(webEndpointProperties, source);
        return webEndpointProperties;
    }


    private static class WebEndpointPropertiesBinder {
        public WebEndpointProperties bind(WebEndpointProperties properties, ConfigurationPropertySource source) {

            return properties;
        }
    }
}

截图如下:

在这里插入图片描述

3. 彩蛋

对于实战中的Demo
可以结合ServerWebExchange或者ServerHttpResponse等类

截图如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】基于pyttsx3库的字符串转音频文件

一、源码 import pyttsx3 engine pyttsx3.init() engine.setProperty(volume, 0.8) engine.setProperty(rate, 150) engine.save_to_file("Hello, World!", "output.mp3") engine.runAndWait()二、介绍 使用pyttsx3库&#xff0c;设置声音与速率&#x…

RTR3学习笔记

目录 引言第二章、图形渲染管线2.1 图形渲染管线架构概述&#xff08;1&#xff09;渲染管线的主要功能&#xff08;2&#xff09;渲染结果是由输入对象相互作用产生的&#xff08;3&#xff09;图像渲染管线的三个阶段&#xff08;4&#xff09;其他讨论 2.2 应用程序阶段&…

SpringBoo利用 MDC 机制过滤出单次请求相关的日志

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1.前言 2.MDC 是什么 3.代码实战 4.总结 1.前言 在服务出现故障时&#xff…

Composer 安装与配置

Composer 是 PHP 领域中非常重要的一个工具&#xff0c;它作为 PHP 的依赖管理工具&#xff0c;帮助开发者定义、管理、安装项目所依赖的外部库。Composer 的出现极大地简化了 PHP 项目的构建和管理过程&#xff0c;使得开发者可以更加专注于代码的编写和功能的实现。 Compose…

matlab使用教程(42)—常见的二维图像绘制方法

这个博客用于演示如何在 MATLAB 中创建曲线图、条形图、阶梯图、误差条形图、极坐标图、针状图、散点图。 1.曲线图 plot 函数用来创建 x 和 y 值的简单线图。 x 0:0.05:5; y sin(x.^2); figure plot(x,y) 运行结果&#xff1a; 线图可显示多组 x 和 y 数据。 x 0:0.05:…

气膜建筑的优势与应用—轻空间为您解答

气膜建筑作为一种利用气膜材料构建主体结构的建筑形式&#xff0c;在现代建筑领域日益受到关注。轻空间将介绍气膜建筑的优势以及其在不同领域的应用。 1. 轻便灵活&#xff1a; 气膜建筑采用轻质材料&#xff0c;相比传统建筑更为轻便&#xff0c;从而减轻了基础负荷和运输成本…

day05-Elasticsearch01

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch 是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在 GitHub 搜索代码在电商网站搜索商品在百度搜索答案在打…

Vue第三方组件使用

文章目录 一、组件传值二、elementui组件使用三、fontawesome图标 一、组件传值 1、父组件与孩子组件传值 在孩子组件中定义props属性&#xff0c;里面定义好用于接收父亲数据的变量。 孩子组件是Movie Movie.vue。注意看在Movie组件里面有props对象中的title和rating属性用…

如何利用python机器学习解决空间模拟与时间预测问题

徐老师&#xff1a;副教授&#xff1a;长期从事定量遥感、遥感数据同化、地表水热通量转化等相关领域的研究&#xff0c;发表多篇相关领域核心期刊论文&#xff0c;具有丰富的实践技术经验。 专题一、机器学习原理与概述 了解机器学习的发展历史、计算原理、基本定义&#xf…

ACL 2024 commit是否提交revision版本的论文

ACL 2024 commit是否提交revision版本的论文? 有大佬知道吗&#xff1f;&#xff01;&#xff01; 哎 ARR rebuttal阶段 让我们加实验&#xff0c;回复一时爽。。 现在又要提交pdf到ACL会议了&#xff0c;是提交之前的ARR版本的稿子&#xff0c;还是我承诺的 revision 稿啊&…

MySQL数据库max_allowed_packet参数

如上图所示的报错&#xff0c;我在提交接口的时候出现了这个错误&#xff1a; MySqlConnector.MySqlException:Error submitting 4MB packet;ensure max_allowed_packet is greater than 4MB.在MySQL数据库中&#xff0c;有一个参数叫max_allowed_packet&#xff0c;这个参数会…

ThingsBoard通过网关动态创建设备并发送属性

1、网关介绍 2、创建网关设备 3、设备连接API 4、设备断开API 5、属性API 5.1、将属性更新发布到服务器 5.2、从服务器请求属性值 5.3、从服务器订阅属性更新 6、遥测上传API 7、远程过程调用API 服务器端 RPC 8、声明设备 API 1、网关介绍 网关是 ThingsBoard 中的…

【七段码数码管的连通性检查】

题目分析 给定一组选用的数码管&#xff0c;要求判断这些数码管是否连通。连通的定义是&#xff1a;所有选用的数码管中的发光二极管必须构成一个连通的图&#xff0c;即从任意一个发光的二极管出发&#xff0c;可以到达其他所有发光的二极管。 思路与算法 构建数码管的邻接…

基于51单片机智能家居空气质量监控—温湿度PM2.5

基于51单片机智能家居空气质量监控 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.检测温度、湿度、PM2.5浓度&#xff0c;并在LCD1602实时显示; 2.可以使用按键设置温湿度上下限、P…

【php开发工程师系统性教学】——laravel中自动验证的实现教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

下载好了annaconda,但是在创建一个新的Conda虚拟环境报错

文章目录 问题描述&#xff1a;解决方案1.生成一个配置文件 问题总结 问题描述&#xff1a; ProxyError(MaxRetryError(“HTTPSConnectionPool(host‘repo.anaconda.com’, port443): Max retries exceeded with url: /pkgs/pro/win-64/repodata.json.bz2 (Caused by ProxyErr…

高抗干扰/抗静电液晶屏驱动IC-VK2C24笔段液晶控制器

VK2C24是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大288点&#xff08;72SEGx4COM&#xff09;或者最大544点&#xff08;68SEGx8COM&#xff09;或者最大960点&#xff08;60SEGx16COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff…

记录一下MySQL8版本更改密码规则

#查看当前密码策略 show variables like validate_password%;#修改密码等级为low set global validate_password.policy LOW; #注意MySQL8版本这是点&#xff0c;不是_#修改密码长度为6 set global validate_password.length 6;#查询我的数据库中user表host和user select host,…

(笔记)KEIL经常碰到的错误(持续整理)

KEIL常碰到的错误 一、ERROR报错1、Build时报错 Error: L6218E2、Build时报错 error 653、Default Compiler Version 54、core_cm3.h(1213): error: unknown type name inline 二、调试与仿真1、keil5软件仿真没有实时波形2、调试模式时&#xff0c;程序前没有灰块3、Periphera…

如何学习VBA_3.2.20:DTP与Datepicker实现日期的输入

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…