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)

大家都在看

  • Queue

    队列( Queue)是一种经常使用的集合。 Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表 Queue接口常用的实现类是 Linke…

    数据库 2023年6月9日
    094
  • 一文说透 MySQL JSON 数据类型(收藏)

    JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 相对字符类型,原生的 JS…

    数据库 2023年5月24日
    081
  • Mysql 的Innodb引擎和Myisam数据结构和区别

    先大体看一下MySQL的SQL layer层的一个架构流程: 简要介绍一些关键模块: [En] Give a brief description of some key modul…

    数据库 2023年5月24日
    093
  • MySQL max() min() 函数取值错误

    今天日志出现异常,一步一步debug发现SQL语句返回值出错,进一步发现是max()函数返回出错。点击跳转解决办法,赶时间的朋友可以去获得答案。当然我还是希望大伙看看原由。 sel…

    数据库 2023年5月24日
    087
  • python爬虫—xpath基础教程

    XPath: XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找…

    数据库 2023年6月11日
    086
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    081
  • MySQL8.0 redo日志系统优化

    现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复。redo日志是物理日志,一般采用WAL(Write-Ahead…

    数据库 2023年6月9日
    099
  • IDEA中Git的使用

    Git在IDEA中的使用 JAVA技术交流群:737698533 创建和导入 创建一个新项目到Gitee上 首先创建一个仓库,勾选上初始化 获取新创建仓库的路径 然后随便在一个文件…

    数据库 2023年6月16日
    084
  • AQS源码探究之竞争锁资源

    AQS源码探究—竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平…

    数据库 2023年6月11日
    089
  • [Mysql]如何设置root密码(8.0+)

    在ubuntu上安装mysql时默认root账号是没有密码的,可以先用 mysql进入mysql,然后输入下面这个( mynewpassword改成要设置的密码): ALTER U…

    数据库 2023年6月16日
    082
  • 设计模式之(6)——建造者模式

    定义:建造者模式也称为生成器模式,将一个个简单对象一步步构造成一个复杂的对象,将复杂对象的构建和它的表示分离,使得同样的构建过程有不同的表示; 主要解决:系统中复杂对象的创建过程,…

    数据库 2023年6月14日
    079
  • 数据结构入门之单链表代码实现(java)

    1:单链表是: 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素。 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) …

    数据库 2023年6月6日
    0110
  • vim+vundle配置

    Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用。一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能。一般流程都…

    数据库 2023年6月9日
    094
  • Failed to write to mysql.slow_log

    最近将一MySQL数据库的系统变量log_output从file调整为table后,偶尔会收到告警邮件,告警邮件内容为: Failed to write to mysql.slow…

    数据库 2023年5月24日
    089
  • MySQL中的全表扫描和索引树扫描

    引言 在学习mysql时,我们经常会使用explain来查看sql查询的索引等优化手段的使用情况。在使用explain时,我们可以观察到,explain的输出有一个很关键的列,它就…

    数据库 2023年5月24日
    0144
  • Centos7开放及查看端口

    Centos7开放及查看端口 1、开放端口 firewall-cmd –zone=public –add-port=5672/tcp –permanent # &#x…

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