SpringBoot自定义环境变量——EnvironmentPostProcessor
现有需求是将数据库配置文件中账号密码相关信息分离且加密,用到了SpringBoot中 EnvironmentPostProcessor 接口。可以将外部配置文件读取注入系统中。
实现 EnvironmentPostProcessor 接口需要重写 postProcessEnvironment 方法。以下是具体实现。
一、 .yml 配置文件 (只分离了数据库相关信息,其他配置文件依然存在)
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
YamlPropertiesFactoryBean yaml= new YamlPropertiesFactoryBean();
//获取外部配置文件
yaml.setResources(new FileSystemResource(new File("")+"\\application-dev.yml"));
Properties object = yaml.getObject();
//读取内部配置文件信息 解密需要
MutablePropertySources propertySources=environment.getPropertySources();
//根据 profiles 中环境 获取相应环境配置文件的数据。
OriginTrackedMapPropertySource env_profile = (OriginTrackedMapPropertySource) propertySources.get("Config resource 'class path resource [application-"+environment.getActiveProfiles()[0]+".yml]' via location 'optional:classpath:/'");
//解密 自定义方法
Map<String, Object> source = env_profile.getSource();
AESCrypto aesCrypto = new AESCrypto(source.get("XXXXX"));//自定义AES加密解密秘钥 本次使用配置文件内的信息当做秘钥加密解密
String decryUrl = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.url"));
String decryUsername = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.username"));
String decryPassword = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.password"));
object.setProperty("spring.datasource.druid.master.url",decryUrl);
object.setProperty("spring.datasource.druid.master.username",decryUsername);
object.setProperty("spring.datasource.druid.master.password",decryPassword);
//添加进 context上下文
propertySources.addFirst(new PropertiesPropertySource("application-druid", Objects.requireNonNull(object)));
}
}
tips:加密方法可以参考使用 hutool AES加密解密。
二、resources/META-INF 目录下创建文件 spring.factories
org.springframework.boot.env.EnvironmentPostProcessor=\
com.web.core.config.MyEnvironmentPostProcessor
#实现 EnvironmentPostProcessor的类 的全路径
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了