java - 基于多个活动配置文件的 Spring 配置
问题描述
我的应用程序包含 2 个不同目标环境的拆分,例如 Linux 和 Windows,以及 DTAP 的拆分。是否可以基于多个活动配置文件加载不同的属性文件?
我们当前的设置包含一个使用 ant 处理的文件夹结构:
视窗:
- 根据:
- 应用程序属性
- 发展:
- 应用程序属性
- 测试
- 应用程序属性
- 生产:
- 应用程序属性
- 根据:
Linux:
- 根据:
- 应用程序属性
- 发展:
- 应用程序属性
- 测试
- 应用程序属性
- 生产:
- 应用程序属性
- 根据:
目标是拥有类似 {OS-active}-{environment-active}-application.properties 的东西。为 8 个活动环境之一加载正确的属性,但还要根据操作系统激活基本属性。
有没有办法通过 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
它在 Kotlin 中,但我认为您有这个想法!
推荐阅读
- javascript - 单击时绑定到 vue.js 数据
- excel - Power Query:连接所有行
- linux - 如何用所有目录中的空格替换所有_
- microsoft-graph-api - 【状态码:未授权;原因:缺少访问租户范围的频道消息订阅('ChannelMessage.Read.All')所需的权限。]
- deep-learning - 即使我一直在努力,谷歌 colab 运行时也会在 90 分钟后断开连接
- optimization - Julia/JuMP 中带有 2 个迭代器的 For 循环
- sparql - 如何为此编写 SPARQL 查询
- email - CRM?是这个名字吗?
- python - 如何将多个文本文件加载到 Google 文本转语音中?
- android - POS蓝牙打印机在启动时留下一些边距,然后在Android App中开始打印