一尘不染

可以使用属性启用/禁用Spring Boot @RestController吗?

spring-boot

给定带有的“标准” Spring Boot应用程序@RestController,例如

@RestController
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
    @RequestMapping(value = "bar")
    public ResponseEntity<String> bar(
        return new ResponseEntity<>("Hello world", HttpStatus.OK);
    }
}

是否存在一种注释或技术,可 /除非存在/不存在某个应用程序属性的情况下完全阻止端点启动。

注意:测试方法内部的属性并爆炸不是解决方案,因为端点将存在。

我不在乎粒度:即仅启用/禁用方法或整个类都可以。


由于配置文件不是属性,因此通过配置文件进行控制无法解决我的问题。


阅读 572

收藏
2020-05-30

共1个答案

一尘不染

我发现使用一个简单的解决方案@ConditionalOnExpression

@RestController
@ConditionalOnExpression("${my.controller.enabled:false}")
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
    @RequestMapping(value = "bar")
    public ResponseEntity<String> bar(
        return new ResponseEntity<>("Hello world", HttpStatus.OK);
    }
}

加上这个注释,除非我有

my.controller.enabled=true

在我的application.properties文件中,控制器根本无法启动。

您还可以使用更方便的方法:

@ConditionalOnProperty("my.property")

行为与上面完全相同;如果该属性存在,并且"true",则组件启动,否则不启动。

2020-05-30