SpringBoot自定义环境变量——EnvironmentPostProcessor

现有需求是将数据库配置文件中账号密码相关信息分离且加密,用到了SpringBoot中 EnvironmentPostProcessor接口。可以将外部配置文件读取注入系统中。

实现 EnvironmentPostProcessor 接口需要重写 postProcessEnvironment 方法。以下是具体实现。

一、 .yml 配置文件 (只分离了数据库相关信息,其他配置文件依然存在)

SpringBoot自定义环境变量——EnvironmentPostProcessor
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"));//&#x81EA;&#x5B9A;&#x4E49;AES&#x52A0;&#x5BC6;&#x89E3;&#x5BC6;&#x79D8;&#x94A5;  &#x672C;&#x6B21;&#x4F7F;&#x7528;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5185;&#x7684;&#x4FE1;&#x606F;&#x5F53;&#x505A;&#x79D8;&#x94A5;&#x52A0;&#x5BC6;&#x89E3;&#x5BC6;
        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);

        //&#x6DFB;&#x52A0;&#x8FDB; context&#x4E0A;&#x4E0B;&#x6587;
        propertySources.addFirst(new PropertiesPropertySource("application-druid", Objects.requireNonNull(object)));
    }
}</string,>

tips:加密方法可以参考使用 hutool AES加密解密。

二、resources/META-INF 目录下创建文件 spring.factories

org.springframework.boot.env.EnvironmentPostProcessor=\
  com.web.core.config.MyEnvironmentPostProcessor
  #&#x5B9E;&#x73B0; EnvironmentPostProcessor&#x7684;&#x7C7B; &#x7684;&#x5168;&#x8DEF;&#x5F84;

SpringBoot自定义环境变量——EnvironmentPostProcessor

Original: https://www.cnblogs.com/cking98/p/16645347.html
Author: 林间小路
Title: SpringBoot自定义环境变量——EnvironmentPostProcessor

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621606/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球