我只是把一些實驗用彈簧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