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的类 的全路径 

posted @   林间小路  阅读(2639)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示