Можете ли вы остановить привязку / перезагрузку Spring Cloud POJO, аннотированных @ConfigurationProperties? - PullRequest
0 голосов
/ 01 июня 2018

Если вы аннотируете POJO с помощью @ConfigurationProperties, это позволяет вам легко загружать свойства из (yml) файла свойств и делать их доступными во время выполнения.

Однако, когда Spring Cloud включенclasspath, поведение несколько меняется: POJO теперь перепривязывается всякий раз, когда срабатывает EnvironmentChangeEvent.Это замечательно, если только вы не манипулировали свойствами при запуске приложения - теперь эти изменения могут быть переопределены в любой момент.

Есть ли способ предотвратить это (например, добавив еще одну аннотацию в этот класс, чтобы сказать"never" rebind)?

В частности, у меня есть @SpringBootTest -аннотированный тестовый класс, в котором библиотека, которую я использую, динамически генерирует номер порта.Я получаю доступ к этому номеру в своем методе @Before и хочу «внедрить» его в POJO, поэтому тестируемое приложение подхватывает его и подключается к этому порту (т. Е. Эквивалентно -Dmy.port=0000 при запуске JVM).Что может быть лучшим способом для достижения этого (если отключение перепривязки и просто присвоение значения нужному полю не работает или это неправильный подход)?

Я попытался установить его с помощью System.setProperty(), что неудивительно, но без особого успеха, или добавить его, добавив новый PropertySource к ApplicationContext и с помощью TestPropertySourceUtil.addInlinePropertiesToEnvironment() - все безрезультатно...

...