java Sping Boot 2定制致动器端点

waxmsbnn  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(109)

春菜:我从STS Spring Starter Project / Maven / Java 8 / Sping 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" ;
        }
    }

}

我尝试启用www.example.com中的所有内容application.properties:

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

但是当它构建时,没有对mapping /actuator/mypoint的引用,并且
http://localhost:8080/actuator/mypoint
http://localhost:8080/application/mypoint
都返回404错误。
我错过了什么?谢谢!

bvpmtnay

bvpmtnay1#

好,解决了:

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

缺少的是“@Component”注解。但是,这在文档中的哪里?

svmlkihl

svmlkihl2#

最初的部分问题是代码没有添加一个没有“选择器”的端点
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:所有记录器的配置(因为它没有“选择器”参数):
在/application/loggers/{name}上获取:命名记录器的配置(使用名称@Selector)。
...
编辑的问题得出结论,应该是一个豆
如果添加一个用@Endpoint注解的@Bean,那么任何用@ReadOperation、@WriteOperation或@DeleteOperation注解的方法都会自动通过JMX公开,在Web应用程序中,也会通过HTTP公开。端点可以使用Jersey、Spring MVC或Spring WebFlux通过HTTP公开。
或在该功能的公告中查看评论

tmb3ates

tmb3ates3#

也许这能帮上忙。
@ReadOperation不支持返回类型Void。在invoke方法中至少应该返回一个空字符串。
spring-boot 2.0.3.版本

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

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

相关问题