可以使用属性启用/禁用弹簧启动@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" ,则组件启动,否则不启动。