如何在没有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。
我相信我会帮你的
- 如何在eclipse maven web项目中编译kotlin
- Spring Boot无法在IntelliJ中运行单个测试
- Mockito / Powermock不像Kotlin预期的那样工作
- 防止回滚 – Spring Data,JUnit和Neo4J
- 在org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated找不到属性’run’
- kotlin中的数字是不可序列化的
- 在@Transactional方法调用期间,初始化期间Bean属性不为null变为null
- 无法通过Springboot连接到远程MongoDB
- spring的数据mongodb和kotlin