2017-10-19 97 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

相关问题