繁体   English   中英

Spring Boot 2自定义执行器端点

[英]Spring Boot 2 Custom Actuator Endpoints

春天Noob:好的。 我从STS Spring Starter Project / Maven / Java 8 / Spring Boot 2.0开始,选择Web和Actuator依赖项。 它构建并运行良好,并响应http:// localhost:8080 / actuator / health 我在主应用程序类中添加了一个“端点”,所以它看起来像这样。

package com.thumbsup;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.Selector;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YourStash11Application {

    public static void main(String[] args) {
        SpringApplication.run(YourStash11Application.class, args);
    }

    @Endpoint(id="mypoint")
    public class CustomPoint {
        @ReadOperation
        public String getHello(){
            return "Hello" ;
        }
    }

}

我尝试在application.properties中启用所有内容:

management.endpoints.enabled-by-default=true
management.endpoint.conditions.enabled=true
management.endpoint.mypoint.enabled=true
management.endpoints.web.exposure.include=*

但是当它构建时,没有参考映射/执行器/ mypoint,和
http:// localhost:8080 / actuator / mypoint
HTTP://本地主机:8080 /应用/ mypoint
都返回404错误。

我错过了什么? 谢谢!

好的,解决了:

    @Endpoint(id="mypoint")
    @Component
    public class myPointEndPoint {
        @ReadOperation
        public String mypoint(){
            return "Hello" ;
        }
    }

缺少的是“@Component”注释。 但是,这在文档中的位置是什么?

最初的部分问题是代码没有添加没有“选择器”的端点

资源

@Endpoint(id = "loggers")
@Component
public class LoggersEndpoint {

    @ReadOperation
    public Map<String, Object> loggers() { ... }

    @ReadOperation
    public LoggerLevels loggerLevels(@Selector String name) { ... }

    @WriteOperation
    public void configureLogLevel(@Selector String name, LogLevel configuredLevel) { ... }

}

此端点公开三个操作:

GET on / application / loggers:所有记录器的配置(因为它没有“selector”参数):

GET on / application / loggers / {name}:命名记录器的配置(使用名称@Selector)。

...

编辑过的问题得出的结论是它应该是一个bean

如果添加使用@Endpoint注释的@Bean,则使用@ReadOperation,@ WritOperation或@DeleteOperation注释的任何方法都将通过JMX自动公开,并且在Web应用程序中也通过HTTP公开。 可以使用Jersey,Spring MVC或Spring WebFlux通过HTTP公开端点。

或者在功能公告中查看评论

也许这会对某人有所帮助。

看起来@ReadOperation不支持返回类型Void 您应该在invoke方法上至少返回一个空字符串。

spring-boot 2.0.3.RELEASE

@Component
@Endpoint(id = "heartbeat")
public class HeartbeatEndpoint {

    @ReadOperation
    public String invoke() {
        return "";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM