Центральный файл конфигурации с Spring - PullRequest
0 голосов
/ 04 апреля 2019

Я строю программную систему, используя Java 11 с SpringBoot 2.1 Я думаю о параметрах конфигурации, но все способы реализации конфигурации в Spring, которые я нашел, пока идут в других направлениях. Вот что я хочу / нужно:

  1. Во-первых, у меня будут некоторые жестко заданные значения конфигурации. Они не должны быть адаптированы через файл конфигурации, который загружается во время выполнения.

    • Пример: имя приложения.
  2. Во-вторых, я хочу (внутренний) файл свойств для значений конфигурации. Они (в основном) будут редактироваться только разработчиками и, следовательно, будут служить стандартными значениями при запуске приложения.

    • Пример: версия приложения.
  3. Наконец, будут некоторые значения конфигурации, которые пользователь должен будет редактировать во время выполнения, используя некоторый интерфейс.

    • Пример: порт приложения

Теперь я хотел бы иметь центральный файл конфигурации, например шаблон Singleton, который управляет значениями конфигурации из всех трех категорий, перечисленных выше. Идея состоит в том, что я могу легко получить доступ ко всему этому в любом месте приложения.

В идеале, у меня был бы одноэлементный класс с центральной функцией, принимающей параметр конфигурации и возвращающей соответствующее значение.

class MyConfig {
    private static singleton = null;
    private MyConfig() {}

    // needed: some name-value storage management for params
    // e.g.: some hardcoded values plus one or more linked property files.

    public static String getProperty(String paramName)
        // fetch parameter and return it
    }

    public static String getProperty(String paramName, String returnType)
        // fetch parameter and return it cast to the specified returnType
    }

    public static String setProperty(String paramName, String value)
        // persist property value to file
    }
}

При запуске приложения конфигурация должна в основном делать

  1. Загрузка жестко закодированных значений в объект конфигурации (если не указан в самом классе конфигурации)
  2. Загрузка значений из файла свойств.
    • Загруженные значения должны проверяться на достоверность (например, app_port является целым числом [1, 65535]).
    • Значения из файла свойств должны быть предварительно зарегистрированы, поэтому пользователь с правами на запись в файл свойств не может «добавить» созданный новый параметр конфигурации, добавив его.
    • Значения из файла свойств не должны перезаписывать жестко закодированные значения.

Когда пользователь редактирует конфигурацию во время выполнения, соответствующие значения должны быть записаны обратно в файл свойств (или где бы они ни хранились)

К сожалению, я не нашел ничего подобного, и я не знаю, как получить Свойства Java и / или Свойства / Конфигурации Spring для реализации чего-то подобного.

Кто-нибудь, кто может указать мне правильное направление или привести минимальный рабочий пример?

1 Ответ

0 голосов
/ 04 апреля 2019

Вы можете загрузить свои свойства из файла свойств в конструкторе класса MyConfig в Immutable Map.Сделайте эту неизменяемую карту свой атрибут уровня класса, чтобы вы могли получить доступ ко всем свойствам, используя этот атрибут.

class MyConfig {
    public static Map<String, String> immutableMap = null;
    private MyConfig() {
          Map<String,String> modifieableMap = new HashMap<>();
          //code to load properties into modifieableMap
          immutableMap = ImmutableMap.copyOf(mutableMap);
    }

    // needed: some name-value storage management for params
    // e.g.: some hardcoded values plus one or more linked property files.

    public static String getProperty(String paramName)
        // fetch parameter and return it
    }

    public static String getProperty(String paramName, String returnType)
        // fetch parameter and return it cast to the specified returnType
    }

    public static String setProperty(String paramName, String value)
        // persist property value to file
    }
}

Если пользователь пытается добавить или удалить любое свойство из неизменной карты, компилятор выдаст исключение UnsupportedOperationException

...