基于多个活动配置文件的Spring配置

时间:2018-08-09 14:55:18

标签: java spring spring-boot

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

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

  • Windows:

    • 基础:
      • application.properties
    • 发展:
      • application.properties
    • 测试
      • application.properties
    • 生产:
      • application.properties
  • Linux:

    • 基础:
      • application.properties
    • 发展:
      • application.properties
    • 测试
      • application.properties
    • 生产:
      • application.properties

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

是否可以使用Spring概要文件通过现成的Spring来做到这一点?

1 个答案:

答案 0 :(得分:0)

我将实现属性:

@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

它在科特林,但我想你有主意!