首页 > 解决方案 > 基于多个活动配置文件的 Spring 配置

问题描述

我的应用程序包含 2 个不同目标环境的拆分,例如 Linux 和 Windows,以及 DTAP 的拆分。是否可以基于多个活动配置文件加载不同的属性文件?

我们当前的设置包含一个使用 ant 处理的文件夹结构:

目标是拥有类似 {OS-active}-{environment-active}-application.properties 的东西。为 8 个活动环境之一加载正确的属性,但还要根据操作系统激活基本属性。

有没有办法通过 Spring 开箱即用的 Spring 配置文件来做到这一点?

标签: javaspringspring-boot

解决方案


我会有我的属性实现:

@Bean
@Primary
fun properties(context: AbstractApplicationContext?): PropertySourcesPlaceholderConfigurer {
    val propertySourcesPlaceholderConfigurer = PropertySourcesPlaceholderConfigurer()

    val yaml = YamlPropertiesFactoryBean()
    val os = System.getProperty("os.name").replace(" ", "")

    val resources = context?.environment?.activeProfiles
        ?.map { profile ->
            ClassPathResource("$os-$profile-application.yml")
        }?.plus(ClassPathResource("$os-base-application.yml"))
        ?.toTypedArray()?: emptyArray()

    yaml.setResources(*resources)

    propertySourcesPlaceholderConfigurer.setProperties(yaml.`object`!!)
    return propertySourcesPlaceholderConfigurer
}

例如,在 MacOS 上,您最终会得到:

MacOSX-test-application.yml
MacOSX-base-application.yml

它在 Kotlin 中,但我认为您有这个想法!


推荐阅读