Если вы аннотируете POJO с помощью @ConfigurationProperties
, это позволяет вам легко загружать свойства из (yml
) файла свойств и делать их доступными во время выполнения.
Однако, когда Spring Cloud включенclasspath, поведение несколько меняется: POJO теперь перепривязывается всякий раз, когда срабатывает EnvironmentChangeEvent
.Это замечательно, если только вы не манипулировали свойствами при запуске приложения - теперь эти изменения могут быть переопределены в любой момент.
Есть ли способ предотвратить это (например, добавив еще одну аннотацию в этот класс, чтобы сказать"never" rebind)?
В частности, у меня есть @SpringBootTest
-аннотированный тестовый класс, в котором библиотека, которую я использую, динамически генерирует номер порта.Я получаю доступ к этому номеру в своем методе @Before
и хочу «внедрить» его в POJO, поэтому тестируемое приложение подхватывает его и подключается к этому порту (т. Е. Эквивалентно -Dmy.port=0000
при запуске JVM).Что может быть лучшим способом для достижения этого (если отключение перепривязки и просто присвоение значения нужному полю не работает или это неправильный подход)?
Я попытался установить его с помощью System.setProperty()
, что неудивительно, но без особого успеха, или добавить его, добавив новый PropertySource
к ApplicationContext
и с помощью TestPropertySourceUtil.addInlinePropertiesToEnvironment()
- все безрезультатно...