我只是把一些实验用弹簧webflux 5.0.0和科特林,我也从application.yml如何在没有spring-boot的情况下在spring-webflux中加载配置?
加载配置对于基地项目的问题,我开始用这个例子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在这样的功能风格?
我是否正确理解,如果没有spring-boot,所有注释(比如@Bean,@Repository,@Transactional和其他)都不适用于Beans?
我的消息来源:github
更新2017年10月21日
找到解决办法。问题与没有任何BeanPostProcessor的事实有关。后,我这包括两个处理器:
bean<CommonAnnotationBeanPostProcessor>()
bean<ConfigurationClassPostProcessor>()
注释@Configuration
,@Bean
和@PostConstruct
开始工作。但是注释@ConfigurationProperties
只存在于spring-boot
依赖性,阳明解析类我只能找到spring-boot-starter
..
包括依赖spring-boot-starter
并添加bean<ConfigurationPropertiesBindingPostProcessor>()
豆类部分,注释@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
。
完整的代码示例:version with fixes
感谢您的回答!但是,正如我所看到的,这个注释并没有工作,或者我做错了什么。 – kurt
我会尽力拉你的代码在本地测试 – romainbsl
谢谢,但我找到了解决方案:)我会稍后更新问题.. – kurt