gpt4 book ai didi

java - 使用 @RefreshScope 刷新 Bean,无需更改配置

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:00 25 4
gpt4 key购买 nike

我有一个 @Configuration 类,如下所示:

@Configuration
public class SampleKieConfiguration {

@Bean
public KieServices kieServices() {
return KieServices.Factory.get();
}

@Bean
public KieContainer kieContainer() {

ReleaseId releaseId = kieServices().newReleaseId("groupId", "artifactId", "version");
KieContainer kieContainer = kieServices().newKieContainer(releaseId);
kieServices().newKieScanner(kieContainer).start(10_000);
return kieContainer;
}

@Bean
public KieBase kieBase() {

KieBaseConfiguration kieBaseConfiguration = kieServices().newKieBaseConfiguration();
kieBaseConfiguration.setOption(EqualityBehaviorOption.EQUALITY);
kieBaseConfiguration.setOption(EventProcessingOption.CLOUD);
return kieContainer().newKieBase(kieBaseConfiguration);
}
}

kieServices().newKieScanner(kieContainer).start(10_000); 行基本上会轮询远程 Maven 存储库,并每 10 秒刷新一次 kieContainer 对象(如果有新工件)。

在我的上层(例如服务层)的某个地方,我有:

@Service
@RefreshScope
public class SampleService {

@Autowired
private KieBase kBase;

}

据我所知,当我调用 /refresh 端点时,kBase 对象没有刷新(至少没有使用新的 kieContainer 对象)。我没有集中配置,当我调用 /refresh 时,我收到了警告。我想要实现的是每次刷新 kieContainer 时都有一个新的 kBase 对象。我怎样才能实现这个目标?谢谢!

最佳答案

刷新不会遍历层次结构。它只是清除缓存,并在下一次引用时(通过它创建的代理)重新创建 bean。在您的情况下,由于 KieBase 不是 @RefreshScope,因此不会重新创建它。因此,将 @RefreshScope 添加到 KieBase 声明中。如果确实不需要重新创建 SampleService,请删除 @RefreshScope 注释。

关于java - 使用 @RefreshScope 刷新 Bean,无需更改配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42441506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com