2017-10-19 3 views
4

Ich nehme nur ein paar Experimente mit Feder webflux 5.0.0 und Kotlin, und ich habe Probleme mit dem Laden Konfiguration von application.yml Projektwie man config in spring-webflux ohne feder-boot lädt?

Für Base I mit diesem Beispiel spring-kotlin-functional
starte Aber es gibt nur die manuelle Beladung Bohnen und Routing ohne Laden von Konfigurationsdateien oder Beispiel, wie Analog der @ConfigurationProperties-Klasse auf diese Weise implementieren.

Ich habe versuchen Umwelt in Bohnen Abschnitt zu nehmen:

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) 
     } 
    } 
} 

aber es gibt nur Systemeigenschaften in Umwelt

Die Frage ist also, wie Konfiguration von application.yml zu laden und wie analog zu implementieren von @ConfigurationProperties in einem solchen funktionalen Stil?

Und verstehe ich richtig, dass ohne Spring-Boot alle Anmerkungen (wie @Bean, @Repository, @Transactional und andere) nicht für Bohnen funktionieren?

Meine Quellen: github

-Update 2017-10-21

eine Lösung finden. Das Problem hing damit zusammen, dass es keinen BeanPostProcessor gab. Und nachdem ich um diese zwei Prozessoren:

bean<CommonAnnotationBeanPostProcessor>() 
bean<ConfigurationClassPostProcessor>() 

Anmerkungen @Configuration, @Bean und @PostConstruct Start zu arbeiten. Aber Anmerkung @ConfigurationProperties existiert nur in spring-boot Abhängigkeit und yml Parsing Klassen finde ich nur in spring-boot-starter ..

Nach Abhängigkeit einschließlich spring-boot-starter und das Hinzufügen von bean<ConfigurationPropertiesBindingPostProcessor>() zu Bohnen Abschnitt, Anmerkung @ConfigurationProperties Start in Arbeit, aber Config von application.yml war auch nicht inbegriffen. Also füge ich diesen Abschnitt hinzu:

val resource = ClassPathResource("/application.yml") 
val sourceLoader = YamlPropertySourceLoader() 
val properties = sourceLoader.load("main config", resource, null) 
environment.propertySources.addFirst(properties) 

zu GenericApplicationContext Konfiguration. Und jetzt funktionieren alle wie erwartet, aber mit einer Abhängigkeit spring-boot-starter.

Vollcodebeispiel: version with fixes

Antwort

0

Frühling Boot ist nur ein Abhängigkeitsmanagement, die Auto-Konfiguration erstellen, die Sie überschreiben können. Alle Features werden von Spring Framework und Modulen vererbt. Im Grunde könnte man das Gleiche mit oder ohne Boot machen.

Ich bin noch nicht auf Webflux. Aber wenn Sie Ihre anderen Beans referenzieren, müssen Sie eine Konfigurations-Bean an anderer Stelle deklarieren.

Ich bin mir sicher, dass ich Ihnen dabei helfen werde ...

+0

Danke für die Antwort! Aber wie ich sehe, diese Annotationen funktioniert nicht, oder ich mache etwas falsch .. – kurt

+0

Ich werde versuchen, Ihren Code zu ziehen, um lokal zu testen – romainbsl

+0

Danke, aber ich fand eine Lösung :) Ich werde Frage später aktualisieren .. – kurt

Verwandte Themen