SpringBoot Endpoint

介绍

SpringBoot的Endpoint主要是用来监控应用服务的运行状况,并集成在Mvc中提供查看接口。内置的Endpoint比如HealthEndpoint会监控dist和db的状况,MetricsEndpoint则会监控内存和gc的状况。

Endpoint的接口如下,其中invoke()是主要的方法,用于返回监控的内容,isSensitive()用于权限控制。

public interface Endpoint<T> {
     String getId();
      boolean isEnabled();
      boolean isSensitive();
      T invoke();
}

Endpoint的加载还是依靠spring.factories实现的。spring-boot-actuator包下的META-INF/spring.factories配置了EndpointAutoConfiguration.

自定义Endpoint

以监控内存为例

定义内存实体类
public class MemoInfo {
    private long maxMemo;

    public long getMaxMemo() {
        return maxMemo;
    }

    public void setMaxMemo(long maxMemo) {
        this.maxMemo = maxMemo;
    }   
}
编写Endpoint类
import org.springframework.boot.actuate.endpoint.Endpoint; 
public class MyEndpoint implements Endpoint<MemoInfo> {
    public String getId() {
        return "myendpoint";
    }
    public MemoInfo invoke() {
        MemoInfo memInfo = new MemoInfo();  
        Runtime runtime = Runtime.getRuntime();  
        memInfo.setMaxMemo(runtime.maxMemory());
        return memInfo;
    }
    public boolean isEnabled() {
        return true;
    }
    public boolean isSensitive() {
        return false;
    }
}

getId()是Endpoint唯一的标识,另外也是MVC接口对外暴露的路径,以上代码对外访问路径就是:http://localhost:8080/myendpoint

编写配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyEndPointAutoConfig {
    @Bean
     public MyEndpoint myEndPoint() {  
        return new MyEndpoint();  
    }  
}
### 解决 Spring Boot 多模块项目中的 No Endpoint 问题 在处理 Spring Boot 的多模块项目时,如果遇到 `No endpoint` 错误,通常是因为某些配置或组件未被正确加载。以下是几种可能的原因及解决方案: #### 配置类扫描路径不当 确保所有的子模块都位于父项目的包结构之下,并且主应用程序能够扫描到这些子模块中的控制器和其他组件。可以通过设置 `@SpringBootApplication` 注解上的 `scanBasePackages` 属性来指定要扫描的基础包名[^1]。 ```java @SpringBootApplication(scanBasePackages = {"com.example.moduleA", "com.example.moduleB"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 缺少必要的依赖项 确认所有涉及的端点功能所需的库已经被引入到了相应的 pom.xml 或 build.gradle 文件里。对于增强开发体验而言,可以考虑加入 spring-boot-devtools 这样的辅助工具集,它有助于提高调试效率并自动重启应用实例当文件发生变化的时候。 #### 不兼容版本冲突 有时不同模块间所使用的框架版本可能存在差异从而引发异常行为。建议统一管理整个项目的依赖关系,在根级 POM 中定义好各主要构件的具体版本号以避免此类情况的发生。 #### 使用Nacos作为配置中心的影响 值得注意的是,若采用像 Nacos 这样第三方的服务发现与配置管理中心,则需注意其特定于版本的支持状况;例如有提到过四版并不受支持的情况存在[^2]。因此应当查阅官方文档了解当前环境下的最佳实践指南以及是否存在已知局限性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值