在长时间运行的进程中刷新spring@refreshscope bean之前捕获它的值

zz2j4svz  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(196)

我正在构建一个微服务系统,并使用springcloud配置通过github-webhook自动刷新进行集中配置。
一切正常,除了在某些情况下,我们需要bean的值在整个过程中保持不变。
例如,这样的代码将导致客户端接收到更新的值,如果在进程中间发生刷新:

@RefreshScope
@ConfigurationProperties
@Component
@Getter
@Setter
public class ServiceConfig {
    @Value("${example.property}")
    private String exampleProperty;
}

@RestController
@RequestMapping("/department")
public class DepartmentController {
    @Autowired
    private ServiceConfig serviceConfig;

    @GetMapping("/config")
    public ResponseEntity<String> getConfig() {
        return ResponseEntity.ok(serviceConfig.getExampleProperty());
    }

    @GetMapping("/config-delayed")
    public ResponseEntity<String> getConfigWithDelay() throws InterruptedException {
        Thread.sleep(30000L);
        return ResponseEntity.ok(serviceConfig.getExampleProperty());
    }
}

我知道 String value = serviceConfig.getExampleProperty() 在线程休眠应该工作之前,但是在具有许多方法调用的复杂场景中,将很难控制和维护。
有什么简单的方法可以做到这一点吗?我们正处于项目的设计阶段,所以除了spring之外,其他支持这种行为的配置管理解决方案也很受欢迎。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题