【问题标题】:How migrate an actuator that extends AbstractMvcEndpoint to Spring Boot 2.x?如何将扩展 AbstractMvcEndpoint 的执行器迁移到 Spring Boot 2.x?
【发布时间】:2018-12-20 17:45:29
【问题描述】:

在 Spring Boot 1.5.x 中,我通过扩展 AbstractMvcEndpoint 创建了一个执行器端点。但是这个类在 Spring Boot 2.x 中不再存在。

我将如何升级以下课程?

@Configuration
@ManagementContextConfiguration
public class MyManagementController extends AbstractMvcEndpoint
{
    private static final Logger logger = LoggerFactory.getLogger( MyManagementController.class );

    public MyManagementController()
    {
        super( "/mypath, false, true );
    }

    @PostConstruct
    public void completeSetup()
    {
        setEnabled( true );
    }

    @GetMapping(
        value = "/" + PATH_PIECE_MANAGERS,
        produces = MediaType.APPLICATION_JSON_VALUE
    )
    @ResponseBody
    public String test(HttpServletRequest request) throws Exception
    {
        return "ok";
    }
}

【问题讨论】:

    标签: java spring spring-boot spring-boot-actuator


    【解决方案1】:

    您可以在 spring-boot 2.x 中使用注解@RestControllerEndpoint,在这里您可以拥有自己的请求映射以及 HttpMethods。这是一个示例:

        @Component
        @RestControllerEndpoint(id = "remote")
        public class CustomActuator {
            @RequestMapping(value = {"/{actuatorInput}"}, produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
            @ResponseBody
            public Map<String, Object> feature(@PathVariable("actuatorInput") String actuatorInput) {
                System.out.println("actuatorInput : " + actuatorInput);
                Map<String, Object> details = new HashMap<>();
                details.put("input", actuatorInput);
                return details;
            }
        }
    

    或者,您可以使用@Endpoint(id = "endpoint"),您可以使用@ReadOperation@WriteOperation 进行GET 和POST 操作。

    这是一个示例:

    @Component
    @Endpoint(id = "custom-health")
    public class CustomHealthEndpoint {
    
        @ReadOperation
        public String customEndPointByName(@Selector String name) {
            return "custom-end-point : " + name;
        }
        @WriteOperation
        public void writeOperation(@Selector String name) {
            System.out.println("Write Operation! :: " + name);
        }
        @DeleteOperation
        public void deleteOperation(@Selector String name){
            System.out.println("Delete Operation! :: " + name);
        }
    }
    

    参考:https://www.javadevjournal.com/spring-boot/spring-boot-actuator-custom-endpoint/

    【讨论】:

    • @Endpoint 是我们迁移所有人的方式。做起来很简单。
    • 我相信 Endpoint 是一种首选方式。我们在大多数情况下使用 Endpoint,但在少数情况下使用 RestControllerEndpoint,因为它似乎提供了更多的灵活性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2019-01-17
    • 2018-08-29
    相关资源
    最近更新 更多