Аннотации Spring Boot: один источник свойств, много свойств?

Я пытаюсь добиться настройки, при которой один файл .properties фактически анализируется на несколько объектов свойств.

Но никакая комбинация вариантов (вложенные классы, квалификаторы и т. д.) на самом деле не приводит к одному и тому же результату.

Это вообще возможно? Каков рекомендуемый способ сделать это?

Пример ниже!

  // file: plugins.properties

  plugins.FooPlugin.enabled=true
  plugins.FooPlugin.amount=1
  plugins.BarPlugin.enabled=false
  // file: (...)/foo/Properties.java

  @Configuration
  @Qualifier("Foo Plugin Properties")
  @PropertySource("classpath:plugins.properties")
  @ConfigurationProperties(prefix = "plugins.foo-plugin")
  public class FooPluginProperties {
    boolean enabled;
    Integer amount; 
  }

  // file: (...)/bar/Properties.java

  @Configuration
  @Qualifier("Bar Plugin Properties")
  @PropertySource("classpath:plugins.properties")
  @ConfigurationProperties(prefix = "plugins.bar-plugin")
  public class BarPluginProperties {
    boolean enabled;
  }

Возможно, я немного запутался в магии анализа свойств здесь.

каждый с одинаковыми свойствами? Или некоторые с одними свойствами, а некоторые с другими?

JustAFellowCoder 27.03.2019 19:49

вы можете удалить этот @Qualifier("Bar Plugin Properties") spring создает bean-компонент на основе имен классов, и в любом случае у вас есть два разных класса

Deadpool 27.03.2019 19:53

Проблема может заключаться в том, что @ConfigurationProperties(prefix = "plugins.foo-plugin") удалите - Spring использует некоторые упрощенные правила для привязки свойств к именам полей.

Deadpool 27.03.2019 19:56

@просто каждый плагин может иметь N собственных свойств

Carlos Vergara 27.03.2019 21:05

Я бы сделал несколько файлов свойств. Если это всего лишь один, я бы создал парсер, который динамически создает несколько из одного.

JustAFellowCoder 27.03.2019 21:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
64
1

Ответы 1

@ConfigurationProperties(prefix = "plugins")
public class FooBarProperties{
    @Value("${FooPlugin.enabled}")
    private boolean enabled;

    @Value("${FooPlugin.amount}")
    private Integer amount;

    @Value("${BarPlugin.enabled}")
    private boolean enabled;
}

Если вам нужен отдельный класс, просто переместите этот плагин панели в свой собственный pojo.

Когда вам нужны свойства, просто автоматически подключайте свой класс для ввода значений. т.е.

public void someFooBar() {
  @Autowired
  private FooBarProperties foobarProp;

...
}

Другие вопросы по теме