как загрузить конфигурацию в spring-webflux без весенней загрузки?

Я просто экспериментирую с Spring Webflux 5.0.0 и Kotlin, и у меня проблема с загрузкой конфигурации из application.yml

Для базового проекта я начинаю с этого примера spring-kotlin-functional
Но есть только ручная загрузка бобов и маршрутизация без какой-либо загрузки из файлов конфигурации или пример, как таким образом реализовать аналог класса @ConfigurationProperties.

Я пытаюсь заняться средой в разделе бобов:

data class DbConfig( var url: String = "", var user: String = "", var password: String = "" ) fun beans(): BeanDefinitionDsl = beans { bean { //try to load config from path=db to data class DbConfig env.getProperty("db", DbConfig::class.java) } bean<DBConfiguration>() //controllers bean { StatsController(ref()) } bean { UserController(ref()) } //repository bean { UserRepository(ref()) } //services bean { StatsService(ref()) } //routes bean { Routes(ref(), ref()) } bean("webHandler") { RouterFunctions.toWebHandler(ref<Routes>().router(), HandlerStrategies.builder().viewResolver(ref()).build()) } //view resolver bean { val prefix = "classpath:/templates/" val suffix = ".mustache" val loader = MustacheResourceTemplateLoader(prefix, suffix) MustacheViewResolver(Mustache.compiler().withLoader(loader)).apply { setPrefix(prefix) setSuffix(suffix) } } } 

но в среде есть только системные свойства

Итак, вопрос в том, как загрузить конфигурацию из application.yml и как реализовать аналог @ConfigurationProperties в таком функциональном стиле?

И правильно ли я понимаю, что без весенней загрузки все аннотации (например, @Bean, @Repository, @Transactional и другие) не будут работать для Beans?

Мои источники: github

Обновление 2017-10-21

Найти решение. Проблема была связана с тем, что там не было никакого BeanPostProcessor. И после включения этих двух процессоров:

 bean<CommonAnnotationBeanPostProcessor>() bean<ConfigurationClassPostProcessor>() 

аннотации @Configuration , @Bean и @PostConstruct начинают работать. Но аннотация @ConfigurationProperties существует только в зависимости от spring-boot , а yml-классы разбора я нахожу только в spring-boot-starter ..

После включения зависимости spring-boot-starter и добавления bean<ConfigurationPropertiesBindingPostProcessor>() в раздел beans, аннотация @ConfigurationProperties начнет работать, но config из application.yml также не был включен. Поэтому я добавляю этот раздел:

 val resource = ClassPathResource("/application.yml") val sourceLoader = YamlPropertySourceLoader() val properties = sourceLoader.load("main config", resource, null) environment.propertySources.addFirst(properties) 

к конфигурации GenericApplicationContext . И теперь все работает так, как я ожидаю, но с включением зависимости spring-boot-starter .

Полный образец кода: версия с исправлениями

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

Я еще не на webflux. Но когда вы ссылаетесь на свои другие бобы, вам нужно указать конфигурационный компонент в другом месте.

Я уверен, что помогу вам с этим …

Intereting Posts
Как получить LifecycleOwner в WearableActivity? Могу ли я ленить инициализировать значение в зависимости от конструктора? kotlin лямбда-выражения в качестве необязательного параметра Kotlin: JsonProperty.Access.READ_ONLY по классу данных RxKotlin collectInto () MutableList с использованием ссылок на методы Строка к растровому изображению в Котлине Как изменить правила подсветки синтаксиса для переменной с модификатором lateinit в IntelliJ (Kotlin)? Почему AtomicInteger является абстрактным в Котлине? (он отлично работает на Java) Когда следует предпочесть функции расширения Котлина? API разработчика Google Play – 400 Недопустимое значение – InAppPurchases Можно ли использовать Ломбок с Котлином? Как вернуть несколько значений из функции в Котлине, как мы делаем это быстро? Неразрешенная ссылка: kotlinx Android BroadcastReceiver onReceived никогда не звонил на устройство Android 7 Kotlin: для диапазона циклов должен быть метод 'iterator ()