Spring Boot 2自定义执行器端点

时间:2018-03-20 15:12:10

标签: java spring spring-boot endpoint actuator

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

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://localhost:8080/application/mypoint
两者都返回404错误。

我错过了什么?谢谢!

3 个答案:

答案 0 :(得分:4)

好的,解决了:

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

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

答案 1 :(得分:0)

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

Source

@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)。

     

...

编辑后的问题得出结论that it should be a bean

  

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

或者查看comments in the announcement of the feature

答案 2 :(得分:0)

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

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

spring-boot 2.0.3.RELEASE

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

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