2017-10-19 92 views
4

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

回答

0

春天開機僅僅是一個依賴管理是建立自動配置,你可以重寫。 所有功能都從Spring框架和模塊繼承而來。所以基本上你可以在啓動或不啓動的情況下做同樣的事

我還沒有使用webflux。但是當你引用其他bean時,你需要在別處聲明一個配置bean。

我敢肯定,我會幫你的...

+0

感謝您的回答!但是,正如我所看到的,這個註釋並沒有工作,或者我做錯了什麼。 – kurt

+0

我會盡力拉你的代碼在本地測試 – romainbsl

+0

謝謝,但我找到了解決方案:)我會稍後更新問題.. – kurt

相關問題