文章插图
b. properties 文件加载
正常情况下,properties/**/*.properties 下的配置文件是不会自动加载到启动项里的 。所以需要通过额外的方式动态加载,具体方法是通过 spring 框架下的 PropertySourcesPlaceholderConfigurer 的类属性,结合环境变量 , 动态批量加载配置文件 。(额外说明,如果是 springMVC 框架,也可以通过 xml 配置 context:property-placeholder 属性来实现 。)
具体代码如下:
/**
* 配置文件环境配置
* @Author zhaoyongping
* @date 2023/7/10 15:13
* @ClassName EnvPropertiesConfig
* @Descripiton 配置文件环境配置
**/
@Configuration
public class EnvPropertiesConfig {
/**
* 加载属性配置
* @param environment 环境属性
* @return PropertySourcesPlaceholderConfigurer
* @author zhaoyongping
* @date 2023/7/10 15:13
* @description 加载属性配置
*/
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfig(Environment environment) throws IOException {
PropertySourcesPlaceholderConfigurer config = new PropertySourcesPlaceholderConfigurer();
String[] activeProfiles = environment.getActiveProfiles();
if (activeProfiles.length > 0) {
String resourceUrl = "classpath:properties/"
+ environment.getActiveProfiles()[0] + "/*.properties";
config.setLocations(
new PathMatchingResourcePatternResolver().getResources(resourceUrl));
} else {
//兜底策略
config.setLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:properties/dev/*.properties"));
}
return config;
}
}
总结通过以上步骤,我们可以实现编译打包镜像不需要跟环境变量绑定 , 而只需要在启动运行时基于不同的分组动态配置的 applicAIton.properties 文件,来实现不同环境的适配 。这种可以在运行时变更配置文件的机制,更适合在云原生时代下的容器化部署方案,也利于我们的服务的可移植性 。当然,以上只是笔者个人的一个实践经验 , 并不能代表它是最优实践方案 。
作者:京东物流 赵勇萍
来源:京东云开发者社区 自猿其说 Tech 转载请注明来源
【Spring 配置文件的炼金术:如何制造容器化时代的完美配方】
推荐阅读
- 事务管理 vs. 锁控制:你真的分得清吗?
- 彻底解决Spring Cloud Gateway中Body读取问题
- 优雅实现API接口开关:让你的应用更可控
- 聊聊常见的限流算法有哪些?
- 网络故障的隐形元凶:MTU配置你了解吗?
- 一图看懂四种接收实时数据更新的设计
- 深入Rust的模式匹配与枚举类型
- 让你开发更舒适的 Tailwind 技巧
- 深入探索Python itertools库的五大常用方法
- Linux中sed命令的五个高级用法