kur*_*urt 5 spring spring-mvc kotlin spring-boot
我只是对 spring webflux 5.0.0 和 Kotlin 进行了一些实验,我在从 application.yml 加载配置时遇到了问题
对于基础项目,我从这个示例开始spring-kotlin-functional
但是只有手动加载 bean 和路由,而没有从配置文件加载任何示例,或者示例如何以这种方式实现 @ConfigurationProperties 类的模拟。
我尝试在 beans 部分中获取环境:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但环境中只有系统属性
所以问题是如何从 application.yml 加载配置,以及如何以这种功能风格实现@ConfigurationProperties 的模拟?
我是否正确理解没有 spring-boot 所有注释(如@Bean、@Repository、@Transactional 等)都不适用于 Bean?
我的来源:github
更新 2017-10-21
找到解决办法。问题与没有任何 BeanPostProcessor 的事实有关。在我包含这两个处理器之后:
bean<CommonAnnotationBeanPostProcessor>()
bean<ConfigurationClassPostProcessor>()
Run Code Online (Sandbox Code Playgroud)
annotations @Configuration
,@Bean
并@PostConstruct
开始工作。但是注解@ConfigurationProperties
只存在于spring-boot
依赖中,而我只在spring-boot-starter
.. 中找到的 yml 解析类
在包含依赖项spring-boot-starter
并添加bean<ConfigurationPropertiesBindingPostProcessor>()
到 beans 部分后,注释@ConfigurationProperties
开始工作,但 application.yml 中的配置也不包含在内。所以我添加了这个部分:
val resource = ClassPathResource("/application.yml")
val sourceLoader = YamlPropertySourceLoader()
val properties = sourceLoader.load("main config", resource, null)
environment.propertySources.addFirst(properties)
Run Code Online (Sandbox Code Playgroud)
到GenericApplicationContext
配置。现在一切都按我的预期工作,但包括一个依赖项spring-boot-starter
。
完整代码示例:修复版本
Spring Boot 只是一个依赖管理,它构建您可以覆盖的自动配置。所有功能均继承自Spring框架和模块。所以基本上无论有没有启动你都可以做同样的事情。
我还没有使用 webflux。但是当您引用其他 bean 时,您可能需要在其他地方声明一个配置 bean。
我确信我会帮助你...
归档时间: |
|
查看次数: |
1305 次 |
最近记录: |