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/593193/

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

(0)

大家都在看

  • RocketMQ扫盲篇

    本篇博客主要参考:《浅入浅出》-RocketMQ 敖丙APACHE-RocketMQ Gitee RocketMQ官方文档RocketMQ 实战与进阶 GitChat 又是好久没有…

    Java 2023年6月5日
    083
  • 到底为什么不建议使用SELECT *?

    “不要使用 SELECT *“几乎已经成为了MySQL使用的一条金科玉律,就连《阿里Java开发手册》也明确表示不得使用 *作为查询的字段列表,更是让这条规…

    Java 2023年6月7日
    061
  • 用300行代码手写1个Spring框架,麻雀虽小五脏俱全

    本文节选自《Spring 5核心原理》 1 自定义配置 1.1 配置application.properties文件 为了解析方便,我们用application.propertie…

    Java 2023年6月7日
    059
  • Mysql 根据一个表数据更新另外一个表

    方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where 参考表.id = 更新表.id); update table_2 m se…

    Java 2023年6月5日
    066
  • Jenkins发布SpringBoot项目

    第二步:Configure System (系统设置) 我们只需要设置最后面的一项,配置远程服务SSH: 配置完成后点击保存即可,为后面我们配置自动化部署做准备,配置如下图: 第三…

    Java 2023年6月5日
    080
  • Java EE发展史

    参阅公众号 BAT的乌托邦-Java EE 专栏 posted @2021-07-26 16:06 March On 阅读(105 ) 评论() 编辑 top last Welco…

    Java 2023年5月29日
    063
  • Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了。估计你们每天都在使用它。它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作…

    Java 2023年6月13日
    0104
  • 分布式session的解决方法

    一、背景 上篇博客,使用微博社交登录谷粒商城后,将用户信息保存在session中,此时进入到谷粒商城的任何页面都需要能够取到用户信息, 谷粒商城首页(gulimall.com/in…

    Java 2023年5月30日
    069
  • Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件

    由于最近在学习SpringBooot,用Eclipse创建SpringBoot项目比较不爽,听说STS插件能直接创建SpringBoot项目,就动手安装一下,希望能对像我一样的小白…

    Java 2023年5月29日
    069
  • SpringBoot+Mybatis实现代码获取建表语句并实现动态建表

    场景 若依前后端分离版本地搭建开发环境并运行项目的教程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108…

    Java 2023年5月30日
    086
  • MongoDB快速入门

    1.介绍 Mongodb:是一个nosql的数据库的一种数据库,他是介于关系型数据库与非关系型数据库之间的一种数据库,也可以理解为它是介于Redis与Mysql之间的一种数据库。它…

    Java 2023年6月9日
    086
  • MongoDB实现数组中重复数据删除

    这个功能真的是写死我了,对于MongoDB一点都不熟悉,本来想使用spring与MongoDB的融合mongoDBTemplate,发现压根不是web项目,懒得配置那些配置文件,就…

    Java 2023年6月8日
    075
  • Kotlin学习快速入门(8)—— 委托

    原文地址:Kotlin学习快速入门(8)—— 属性委托 – Stars-One的杂货小窝委托其实是一种设计模式,但Kotlin把此特性编写进了语法中,可以方便开发者快速…

    Java 2023年6月13日
    085
  • SpringBoot进阶教程(七十一)详解Prometheus+Grafana

    随着容器技术的迅速发展,Kubernetes已然成为大家追捧的容器集群管理系统。Prometheus作为生态圈Cloud Native Computing Foundation(简…

    Java 2023年6月8日
    0177
  • 一个简易的SpringCloud Http Post 请求发送工具

    为了方便开发同学,用Python写了一个POST请求发送可执行脚本,方便那些不能使用postman等使用的局域网。当然可以使用CURL命令、用PHP写一个也未尝不可,但并不具备跨平…

    Java 2023年5月30日
    0102
  • 异常

    异常 异常分为两大类,运行时异常和编译时异常 运行时异常,编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该避免出现的异常。java.lang.RuntimeExc…

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