你能阻止Spring Cloud重新绑定/重新加载用@ConfigurationProperties注释的POJO吗?

时间:2018-06-01 10:02:14

标签: java spring spring-boot spring-cloud configuration-files

如果使用@ConfigurationProperties注释POJO,则可以轻松地从(yml)属性文件加载属性并使其在运行时可用。

但是,当Spring Cloud在类路径上时,行为会有所改变:每当EnvironmentChangeEvent被触发时,POJO现在都是re-bound。这很好,除非你在app启动时稍微操纵了这些属性 - 这些更改现在可以在任何时候被覆盖。

有没有办法阻止这种情况发生(例如,通过向该类添加另一个注释来说“从不”重新绑定)?

特别是,我有一个@SpringBootTest - 带注释的测试类,其中我使用的库是动态生成端口号。我在我的@Before方法中访问该号码,并希望将其“注入”到POJO中,因此正在测试的应用程序将其选中并连接到该端口(即相当于-Dmy.port=0000 at JVM发布)。什么是更好的方法来实现(如果关闭重新绑定,只是将值分配给正确的字段不起作用或是错误的方法)?

我尝试通过System.setProperty()进行设置,毫不奇怪但收效甚微,或者通过向PropertySource添加新的ApplicationContext并使用TestPropertySourceUtil.addInlinePropertiesToEnvironment()添加它 - 一切都无济于事......

0 个答案:

没有答案