可以使用属性启用/禁用弹簧启动@RestController吗?
给出带有@RestController
的“标准”spring引导应用程序,例如
@RestController @RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") public class MyController { @RequestMapping(value = "bar") public ResponseEntity bar( return new ResponseEntity("Hello world", HttpStatus.OK); } }
是否存在注释或技术,如果/除非某个应用程序属性存在/不存在,则会阻止端点启动。
注意:测试方法内的属性并爆炸不是解决方案,因为端点将存在。
我不关心粒度:即启用/禁用方法或整个类都很好。
由于配置文件不是属性,因此通过配置文件进行控制并不能解决我的问题。
我找到了一个使用@ConditionalOnExpression
的简单解决方案:
@RestController @ConditionalOnExpression("${my.controller.enabled:false}") @RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") public class MyController { @RequestMapping(value = "bar") public ResponseEntity bar( return new ResponseEntity<>("Hello world", HttpStatus.OK); } }
添加此注释,除非我有
my.controller.enabled=true
在我的application.properties
文件中,控制器根本不会启动。
您还可以使用更方便:
@ConditionalOnProperty("my.property")
其行为与上述完全相同; 如果属性存在且为"true"
,则组件启动,否则不启动。