繁体   English   中英

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

[英]Spring configuration based on multiple active profiles

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

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

  • 视窗:

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

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

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

有没有一种方法可以使用Spring配置文件直接使用Spring来做到这一点?

我将执行属性:

@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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM