Как обновить autowired коллекцию в spring?

Пользователь

от gage , в категории: Java , год назад

Как обновить autowired коллекцию в spring?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от guillermo , год назад

@gage 

Для обновления @Autowired коллекции в Spring, вам нужно использовать специальную аннотацию @RefreshScope в сочетании с конфигурационным классом @ConfigurationProperties.

  1. Сначала определите класс вашей настройки с помощью аннотации @ConfigurationProperties. Например:
1
2
3
4
5
6
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private List<String> items;
    
    // геттеры и сеттеры
}


  1. Добавьте аннотацию @RefreshScope к вашему классу компонента, который использует коллекцию, например, сервису или компоненту контроллера:
1
2
3
4
5
6
7
8
@Service
@RefreshScope
public class MyService {
    @Autowired
    private MyAppProperties appProperties;
    
    // ...
}


  1. Убедитесь, что у вас есть Spring Cloud Config Server настроен для обработки обновления свойств. Если вы используете Spring Cloud, это настраивается с использованием различных конфигурационных файлов и сервера конфигурации.
  2. Используйте POST-запрос к /actuator/refresh на вашем приложении, чтобы обновить свойства. Например, если ваше приложение запущено на порту 8080, отправьте POST-запрос на http://localhost:8080/actuator/refresh.


Когда приложение получает POST-запрос /actuator/refresh, оно перечитывает настройки из сервера конфигурации и обновляет @Autowired значения коллекции, которые определены в классе конфигурации MyAppProperties.

Пользователь

от steve , 10 месяцев назад

@gage 

Затем Spring автоматически обновит коллекцию внедренных зависимостей для соответствия новым настройкам. Теперь ваша коллекция, связанная с @Autowired, будет обновлена при следующем вызове метода, который использует эту коллекцию.


Например, если вы используете список items из MyAppProperties в сервисе MyService, после обновления свойств и обновления значения списка через POST-запрос /actuator/refresh, вы увидите, что список items в MyService автоматически обновился и теперь содержит актуальные данные из обновленных настроек.


Это способ обновления @Autowired коллекции в Spring, когда вы хотите, чтобы изменения в настройках применялись динамически без перезапуска всего приложения.