Я пытаюсь добиться настройки, при которой один файл .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;
}
Возможно, я немного запутался в магии анализа свойств здесь.
вы можете удалить этот @Qualifier("Bar Plugin Properties") spring создает bean-компонент на основе имен классов, и в любом случае у вас есть два разных класса
Проблема может заключаться в том, что @ConfigurationProperties(prefix = "plugins.foo-plugin") удалите - Spring использует некоторые упрощенные правила для привязки свойств к именам полей.
@просто каждый плагин может иметь N собственных свойств
Я бы сделал несколько файлов свойств. Если это всего лишь один, я бы создал парсер, который динамически создает несколько из одного.




@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;
...
}
каждый с одинаковыми свойствами? Или некоторые с одними свойствами, а некоторые с другими?