给定带有的“标准” Spring Boot应用程序@RestController,例如
@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); } }
是否存在一种注释或技术,可 在 /除非存在/不存在某个应用程序属性的情况下完全阻止端点启动。
注意:测试方法内部的属性并爆炸不是解决方案,因为端点将存在。
我不在乎粒度:即仅启用/禁用方法或整个类都可以。
由于配置文件不是属性,因此通过配置文件进行控制无法解决我的问题。
我发现使用一个简单的解决方案@ConditionalOnExpression:
@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文件中,控制器根本无法启动。
application.properties
您还可以使用更方便的方法:
@ConditionalOnProperty("my.property")
行为与上面完全相同;如果该属性存在,并且"true",则组件启动,否则不启动。
"true"