我使用 @ConfigurationProperties 和 Zookeeper 在运行时更新某些属性值。
代码的相关部分如下所示:
@Configuration
public class Config {
@Bean("limitedRepository")
public Repository limitedRepository(
@Qualifier("repository") Repository repository,
@Value("${some.property-one:1}") int one,
@Value("${some.property-two:2}") int two) {
return new LimitedRepository(repository, one, two);
}
@Bean("rateAdjuster")
@ConfigurationProperties(prefix = "some.property")
public RateAdjuster rateAdjuster(
@Qualifier("limitedRepository") Repository limitedRepository,
@Value("${some.property-one:1}") int one,
@Value("${some.property-two:2}") int two,
@Value("${some.property-three:3}") int three,
@Value("${some.property-four:4}") int four
) {
return new RateAdjuster(limitedRepository, one, two, three, four);
}
}
Bean limitedRepository使用值作为费率,而rateAdjuster是具有预定方法的 bean,它应该根据某些标准调整和设置费率到limitedRepository bean。
所以我的目标是:
- 在应用程序运行时设置limitedRepository和rateAdjuster bean 的所有属性
- 当我想更新属性时,我只希望rateLimiter bean 上的属性在运行时更新(limitedRepository上的速率只能由rateAdjuster更新)。
它几乎可以工作。它设置了应有的属性,但发生了一些有趣的事情。
- 当我尝试通过 Zookeeper 更新属性三或四个(它们仅在rateAdjuster bean 中设置)时,它工作正常,rateAdjuster用这些值更新
- 当我尝试通过 Zookeeper 更新一个或两个属性(它们也在limitedRepository bean 中设置)时,rateAdjuster不会更新
- 如果我
@ConfigurationProperties(prefix = "some.property")
使用limitedRepository()方法,那么所有属性都可以在运行时更新,但这不是我想要的
任何人都可以帮助我了解这里发生的事情并希望找到解决这个问题的方法吗?