cómo cargar config en spring-webflux sin spring-boot?

Acabo de realizar algunos experimentos con spring webflux 5.0.0 y Kotlin, y tengo problemas para cargar la configuration desde application.yml

Para el proyecto base empiezo con este ejemplo spring-kotlin-functional
Pero solo hay beans de carga manual y routing sin ninguna carga desde los files de configuration o, por ejemplo, cómo implementar la class análogo de @ConfigurationProperties de esa manera.

Intenté tomar el medio ambiente en la sección de frijoles:

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) } } } 

pero solo hay properties del sistema en el entorno

Entonces, la pregunta es ¿cómo cargar la configuration desde application.yml y cómo implementar analog de @ConfigurationProperties en dicho estilo funcional?

¿Y entiendo correctamente que sin spring-boot todas las annotations (como @Bean, @Repository, @Transactional y otras) no funcionarán para Beans?

Mis fonts: github

Actualización 2017-10-21

Encuentra una solución. El problema estaba relacionado con el hecho de que no había ningún BeanPostProcessor. Y después de include estos dos procesadores:

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

las annotations @Configuration , @Bean y @PostConstruct comienzan a funcionar. Pero la anotación @ConfigurationProperties solo existe en la dependencia de spring-boot , y las classs de análisis yml solo las encuentro en spring-boot-starter .

Después de include la dependencia spring-boot-starter y agregar la sección bean<ConfigurationPropertiesBindingPostProcessor>() a beans, la anotación @ConfigurationProperties comienza a funcionar, pero config desde application.yml tampoco se incluyó. Entonces agrego esta sección:

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

a la configuration GenericApplicationContext . Y ahora todo funciona como espero, pero con la inclusión de una dependencia spring-boot-starter .

Ejemplo de código completo: versión con arreglos