Пожалуйста, попробуйте:
- Поместите ваш
application.yaml
, который состоит из вашей конфигурации yaml, в /src/main/resources/
. - Используйте свойство с пометкой
@Value
, например:
public mongoListener(@Value("${configs[0].collection}") String collectionName) {
// collectionName is 'col1'
//do something
}
[РЕДАКТИРОВАТЬ 1]
Вы можете создавать singleton
бинов, отличающихся друг от друга по имени, например:
@Configuration
public class MyConfiguration {
@Bean("mongoListener_A")
public mongoListener mongoListener_A(@Value("${configs[0].collection}") String collectionName) {
return new mongoListener(collectionName);
}
@Bean("mongoListener_B")
public mongoListener mongoListener_B(@Value("${configs[1].collection}") String collectionName) {
return new mongoListener(collectionName);
}
// ... and so on
}
[РЕДАКТИРОВАТЬ 2]
Вы можете считывать свои конфигурации yaml в java объекты, используя аннотацию @ConfigurationProperties
.
@Data //lombok annotation.
@Component("myConfigs")
@ConfigurationProperties
public class Configs {
private final List<Config> configs;
@Data //lombok annotation.
public static class Config {
private String collection;
private String groupId;
private String topic;
}
}
Вы можете создать свой mongoListener
с от таких объектов, как:
@Configuration
public class MyConfiguration {
@Bean
public List<mongoListener> mongoListeners(@Qualifier("myConfigs") Configs configs) {
return configs.getConfigs().stream()
.map(Config::getCollection)
.map(mongoListener::new)
.collect(Collectors.toList());
}
// ... and so on
}
Бины по-прежнему singleton
, но вы можете создать произвольное количество экземпляров в зависимости от вашего файла yaml.
См. Также
Использование YAML для внешних свойств - Справочная документация по загрузке пружин Руководство с инструкциями
Spring @Value с разбиением массива и получением первого значения