@RefreshScope 和 @ConditionalOnProperty 不起作用
Posted
技术标签:
【中文标题】@RefreshScope 和 @ConditionalOnProperty 不起作用【英文标题】:@RefreshScope with @ConditionalOnProperty does not work 【发布时间】:2018-02-26 12:06:13 【问题描述】:问题
探索在不重新启动 JVM 的情况下按需启用/禁用 @RequestMapping
端点的选项。在运行时在端点上实现终止开关。
尝试
我尝试了以下方法,但 @RefreshScope
似乎不适用于 @ConditionOnProperty
@RestController
@RefreshScope
@ConditionalOnProperty(name = "***.endpoints", havingValue = "enabled")
public class MyController
@Value("$***.endpoints")
String value;
@RequestMapping(path = "/sample", method = RequestMethod.GET)
public ResponseEntity<String> process()
return ResponseEntity.ok(value);
使用更新的属性
POST /env?***.endpoints=anyvalue
并使用重新加载上下文
POST /refresh
此时控制器返回更新后的值。
问题
还有其他方法可以实现所需的功能吗?
【问题讨论】:
基本上你想做的事情是不可能的。下面的链接解释了原因。 github.com/spring-cloud/spring-cloud-config/issues/1645 【参考方案1】:Boot 中的条件仅适用于 Configuration 类级别或 bean 定义级别。
这可能会对你有所帮助。
public class MyWebConfiguration extends WebMvcConfigurationSupport
@Bean
@ConditionalOnProperty(prefix="***.endpoints",name = "enabled")
public MyController myController()
return new MyController ();
【讨论】:
以上是关于@RefreshScope 和 @ConditionalOnProperty 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
@RefreshScope 似乎忽略了 Mockito 的嘲笑
SpringBoot+Nacos:@RefreshScope自动刷新原理
@LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析