当前位置: 首页 > 知识库问答 >
问题:

如何在没有spring-boot的情况下加载spring-webflux中的配置?

尉迟越
2023-03-14

我尝试在bean部分中使用环境:

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的模拟?

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

注释@configuration@bean@postconstruct开始工作。但是注释@configurationproperties仅存在于spring-boot依赖项中,而yml解析类仅存在于spring-boot-starter中。

在包含依赖项spring-boot-starter并将bean () 添加到beans部分之后,注释@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

完整代码示例:带有修补程序的版本

共有1个答案

丁茂
2023-03-14

Spring boot只是一个依赖项管理,它构建了可以覆盖的自动配置。所有的功能都是从Spring框架和模块中继承的。所以基本上不管有没有boot都可以这样做。

我还没上webflux。但是当您引用其他bean时,您需要在其他地方声明一个配置bean。

我肯定我会帮你的...

 类似资料:
  • 问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1

  • 我正在尝试在运行时重新加载应用程序的配置。配置位于yaml文件中,与ConfigurationProperties的绑定按预期工作。接下来就是。我想在yaml更改后重新加载配置。或者更确切地说,我正在使用预定的检查文件是否已更改。 我希望避免运行第二台服务器来更新我的环境。我有两个问题: 如何更新环境,也许? 我如何传播这些? Spring云配置文档说明: 只要您能够实际更改环境并发布事件,Env

  • 我正在尝试设置SpringXML配置,而不必创建进一步的。但是我经常遇到以下异常,即使我在 spring.xml: 我错过了什么?

  • 我有一个现有的spring 4项目(mvc、jdbc等),我试图将其移植到spring boot,但我做不到(许多依赖项存在问题,没有人能解释我是如何做到这一点的)。但现在我只想在现有项目中使用Spring数据JPA。这是pom的一个主要依赖项: 我使用EntityManagerFactorybean(在所有示例中都使用)完成了现有配置。数据库配置: 用于测试的Derby数据库。但主要数据库类型是

  • 我正在尝试使用Poc为我们的项目创建一个侦探应用程序,以便使用Spring mvc(即没有Spring Boot)进行日志记录。我无法在网络上找到我的mvc文档/材料。 那么,如何创建Tracer、spanbean并注入记录器以进行日志记录呢?

  • 我使用创建了一个应用程序构建文件。这将用和文件填充文件夹。 我在internet上进行了搜索,发现可以使用运行这些文件。不幸的是,这会产生以下错误输出: org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.boot.autocigure.orm.jpa.hibernatejpaAutoCo