如果使用@ConfigurationProperties
注释POJO,则可以轻松地从(yml
)属性文件加载属性并使其在运行时可用。
但是,当Spring Cloud在类路径上时,行为会有所改变:每当EnvironmentChangeEvent
被触发时,POJO现在都是re-bound。这很好,除非你在app启动时稍微操纵了这些属性 - 这些更改现在可以在任何时候被覆盖。
有没有办法阻止这种情况发生(例如,通过向该类添加另一个注释来说“从不”重新绑定)?
特别是,我有一个@SpringBootTest
- 带注释的测试类,其中我使用的库是动态生成端口号。我在我的@Before
方法中访问该号码,并希望将其“注入”到POJO中,因此正在测试的应用程序将其选中并连接到该端口(即相当于-Dmy.port=0000
at JVM发布)。什么是更好的方法来实现(如果关闭重新绑定,只是将值分配给正确的字段不起作用或是错误的方法)?
我尝试通过System.setProperty()
进行设置,毫不奇怪但收效甚微,或者通过向PropertySource
添加新的ApplicationContext
并使用TestPropertySourceUtil.addInlinePropertiesToEnvironment()
添加它 - 一切都无济于事......