如何在没有spring-boot的情况下在spring-webflux中加载配置?

我只是用spring webflux 5.0.0和Kotlin做了一些实验,并且从application.yml加载配置有问题

对于基础项目,我从这个例子spring-kotlin-functional开始
但是,只有手动加载Bean和路由,没有任何来自配置文件的加载或例如如何以这种方式实现@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() //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().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加载配置以及如何在这样的function风格中实现@ConfigurationProperties的模拟?

如果没有spring引导,所有的注解(比如@Bean,@ Repository,@Transactional和其他)都不能用于Bean吗?

我的来源: github

更新2017-10-21

find解决方案。 问题与没有任何BeanPostProcessor的事实有关。 包括这两个处理器之后:

 bean() bean() 

@Configuration @Bean@Configuration @Bean@PostConstruct注释开始工作。 但注释@ConfigurationProperties只存在于spring-boot依赖项中,而yml解析类只能在spring-boot-starter

在包含依赖spring-boot-starter并向bean节添加bean()后,注释@ConfigurationProperties开始工作,但是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引导只是一个依赖管理,可以构建自动配置,您可以覆盖。 所有的function都是从Spring框架和模块inheritance而来的。 所以基本上你可以做或没有启动相同。

我还没有在webflux上。 但是当你引用你的其他bean时,你需要在别处声明一个配置bean。

我相信我会帮你的