Arhn - архитектура программирования

Перезагрузка списка springboot @ConfigurationProperties не работает

У меня есть проблема, которую я настраиваю с помощью @ConfigurationProperties, когда эта конфигурация изменяется, объект конфигурации не изменяется. Конфиг есть список. если добавить конфигурацию, список изменится, но если удалить конфигурацию, список не изменится.


@ConfigurationProperties(prefix = "zzzz.kafka")

public class ToadDynamicProps {

    private List<String> bootstrapServers;

    public ToadDynamicProps() {
        System.out.println(bootstrapServers + " ===============");
    }

    public List<String> getBootstrapServers() {
        return bootstrapServers;
    }

    public void setBootstrapServers(List<String> bootstrapServers) {
        this.bootstrapServers = bootstrapServers;
    }
}

И я сам реализую слушателя так:

    @Override
    public void onConfigChange(Map<String, String> properties) {

        if (log.isDebugEnabled()) {
            log.debug("ToadContextRefresher invoked, changed keys: {}", properties.keySet());
        }

        // update environment
        MutablePropertySources targetSources = context.getEnvironment().getPropertySources();
        CompositePropertySource compositeSource = (CompositePropertySource) targetSources.get(BOOTSTRAP_PROPERTY_SOURCE_NAME);
        CompositePropertySource newBootstrapSource = new CompositePropertySource(BOOTSTRAP_PROPERTY_SOURCE_NAME);
        //TODO fix
        if(null == compositeSource) {
            return ;
        }

        // shallow copy for non-toad propertySource, swap toad propertySource
        for (PropertySource part : compositeSource.getPropertySources()) {
            if (Objects.equals(part.getName(), TOAD_PROPERTY_KEY)) {
                log.debug("Found toad property source in environment, update it...");
                Map<String, Object> oldProperties = ((MapPropertySource) part).getSource();
                Map<String, Object> newProperties = new HashMap<>(oldProperties);
                newProperties.putAll(properties);
                MapPropertySource newToadSource = new MapPropertySource(TOAD_PROPERTY_KEY, newProperties);
                newBootstrapSource.addPropertySource(newToadSource);
            }
            newBootstrapSource.addPropertySource(part);
        }
        targetSources.replace(BOOTSTRAP_PROPERTY_SOURCE_NAME, newBootstrapSource);

        Set<String> changedKeys = properties.keySet();
        this.context.publishEvent(new EnvironmentChangeEvent(context, changedKeys));
       
        this.scope.refreshAll();
    }

Ответы:


1

Убедитесь, что класс (ToadDynamicProps) должен иметь аннотацию @Configuration, или вам нужно предоставить @EnableConfigurationProperties(ToadDynamicProps.class) в основном классе приложения Spring, чтобы связать свойства с POJO.

Убедитесь, что свойство из файла свойств и класс (с заданным префиксом) имеют правильную привязку.

При изменении убедитесь, что файл класса и файл свойств скомпилированы правильно.

Сделайте реализацию вашего класса сериализуемой (при необходимости).

Дайте мне знать, если вы все еще сталкиваетесь с проблемой после проверки этого.

03.10.2020
  • Спасибо за Ваш ответ . Во-первых, я уверен во всем вышеперечисленном. ``` @EnableConfigurationProperties(ToadDynamicProps.class) @SpringBootApplication открытый класс HunterMigrateTestApplication расширяет SpringBootServletInitializer ``` Я использую центр конфигурации, такой как apollo。 Когда я изменяю содержимое объекта в списке. Это изменение работает, но если я удалю объект, список не изменится в памяти. The ToadDynamicProps#bootstrapServers 04.10.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..