【Spring】@PropertySource 配置文件自定义加密、自定义Yaml文件加载

news2024/11/25 20:51:46

文章目录

    • 前言
    • 参考目录
    • 实现步骤
      • 1、包结构
      • 2、Maven
      • 3、自定义配置文件
      • 4、application 文件
      • 5、自定义数据库配置 `MyDataSource`
      • 6、加密配置 `EncryptYamlProperties`
      • 7、自定义读取yaml配置 `MyPropertySourceFactory`
      • 8、测试加密解密
      • 9、自定义 Properties 文件读取
      • 10、测试自定义配置读取
    • 最后说几句

前言

今天研究了一下关于配置文件的自定义加密,很久以前用过 jasypt 加密,依稀记得运行 jar 包的时候还得把密码写到执行命令里面,不大方便,然后碰巧看到有使用自定义 Yaml 文件的方式进行加密解密的,就试着玩了一下,这篇博客简单介绍一下用法,除了加密解密以外还有简单介绍一下配置文件的读取替换。

参考目录

  • Using @PropertySource
  • @PropertySource with YAML Files in Spring Boot

实现步骤

1、包结构

在这里插入图片描述

2、Maven

除了常见的配置以外,需要引入的是 Hutoolbcprov-jdk15to18,前者是加密工具类,后者是加密所需要的 jar。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15to18</artifactId>
    <version>1.69</version>
</dependency>

除此之外,需要注意 <build> 标签下的配置,Maven 打包时会把 resources 文件夹下相应环境的文件替换到 properties 下。

<resource>
    <directory>${project.basedir}/src/main/resources/profile/${profiles.active}</directory>
    <filtering>true</filtering>
    <includes>
        <include>*.*</include>
    </includes>
    <targetPath>properties</targetPath>
</resource>

完整的代码可以看代码包。

3、自定义配置文件

dev 为例。

encrypt.yml
在这里插入图片描述

business.properties
在这里插入图片描述

4、application 文件

application.yml
在这里插入图片描述

application-dev.yml
在这里插入图片描述

5、自定义数据库配置 MyDataSource

在这里插入图片描述
这里使用了工具类对配置文件的字符串解密之后再保存到 Hikari 配置中。

6、加密配置 EncryptYamlProperties

在这里插入图片描述
@PropertySource 指定了引用的配置文件,以及读取配置的方法是 MyPropertySourceFactory,因为不能直接读取 Yaml 文件配置,所以需要转换成 Properties

7、自定义读取yaml配置 MyPropertySourceFactory

在这里插入图片描述

8、测试加密解密

启动项目,如果正常启动就说明数据库连接正常,保险起见,引入了一个TestDemo 的类测试,也引入了 MyBatis-Plus 简化代码的书写。

在这里插入图片描述

请求成功:
在这里插入图片描述

9、自定义 Properties 文件读取

/**
 * 业务yaml文件配置
 *
 * @author Michelle.Chung
 */
@Component
public class BusinessProperties {

    /**
     * 文件路径
     */
    private static final String BUSINESS_PROPERTIES = "properties/business.properties";

    /**
     * 单例
     */
    private static final BusinessProperties INSTANCE = new BusinessProperties();

    private final Properties properties;

    public BusinessProperties() {
        try {
            this.properties = PropertiesLoaderUtils.loadAllProperties(BUSINESS_PROPERTIES);
        } catch (IOException e) {
            throw new RuntimeException("读取配置文件时出现异常...", e);
        }
    }

    /**
     * 获得当前实例
     *
     * @return
     */
    public static BusinessProperties getInstance() {
        return INSTANCE;
    }

    /**
     * 获取value值
     */
    public String getValue(String key) {
        if (null == properties || StrUtil.isBlank(key)) {
            return null;
        }
        return properties.getProperty(key);
    }

}

10、测试自定义配置读取

在这里插入图片描述

请求成功:

在这里插入图片描述

最后说几句

本文比较简单,我觉得这个功能用不用见仁见智吧,开始也只是看到觉得没有用过所以测试一下,也方便以后如果有机会的话可以参考。

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

走近科学之《JVM 的秘密》

JVM JVM、内存模型、类加载机制、对象的创建、垃圾回收机制、对象内存分配策略、JVM调优等。 1 简介 JVM 即 java 虚拟机&#xff08;Java Virtual Machine&#xff09;&#xff0c;JVM是一种用于计算设备的规范&#xff0c;是一个虚构出来的计算机。是通过在实际计算机上仿真…

msvcr120.dll丢失的解决方法-一键解决提示msvcr120.dll丢失问题

msvcr120.dll是的动态链接库文件之一。它在Windows操作系统中发挥着重要的作用&#xff0c;它提供了应用程序所需的各种功能和方法。 该文件返回编译后的代码所需的支持库。msvcr120.dll包含用于C / C编译器生成的应用程序所需的重要功能&#xff0c;包括数学函数&#xff0c;…

Selenium定位不到元素怎么办?一定要这么做

目录 1、frame/iframe表单嵌套 selenium自动化测试视频教程&#xff1a; 2、页面跳转到新标签页&#xff0c;或弹出警告框等 3、页面元素失去焦点导致脚本运行不稳定 4、使用Xpath或CSS定位 6、元素被遮挡&#xff0c;不可用&#xff0c;不可见 2023最新的Selenium自动化…

linux部署rabbitmq开启mqtt插件由于监听1883端口导致重启rabbitmq失败的解决方法

linux部署rabbitmq开启mqtt插件由于监听1883端口导致重启rabbitmq失败的解决方法 第一步&#xff1a;部署rabbitmq 部署rabbitmq请移步&#xff08;在这里可以找到erlang和rabbitmq适配的版本并下载安装包&#xff09;&#xff1a; https://blog.csdn.net/char1otte/article/de…

mysql:索引原理与慢查询优化

一 索引的原理 1. 索引原理 索引的目的在于提高查询效率&#xff0c;与我们查阅图书所用的目录是一个道理&#xff1a;先定位到章&#xff0c;然后定位到该章下的一个小节&#xff0c;然后找到页数。相似的例子还有&#xff1a;查字典&#xff0c;查火车车次&#xff0c;飞机…

【Shiro】第一章 权限概述

目录 1、什么是权限 2、认证概念 3、授权概念​​​​​​​ 1、什么是权限 权限管理&#xff0c;一般指根据系统设置的安全策略或者安全规则&#xff0c;用户可以访问而且只能访问自己被授权的资源&#xff0c;不多不少。权限管理几乎出现在任何系统里面&#xff0c;只要…

玩转ChatGPT:R代码Debug一例

一、写在前面 今天家里领导发来求助&#xff0c;说是用GPT-3.5写一个 计算mRNA干性指数 的R代码&#xff0c;运行报错。让我用GPT-4帮忙Debug一哈。 搞了半小时&#xff0c;还是有亿点感悟&#xff0c;写段文字记录记录。 二、踩坑过程 &#xff08;1&#xff09;先看原始的…

渗透测试报告怎么写?记得收藏好哦

目录 1、准备好渗透测试记录 2、撰写渗透测试报告书 报告书的撰写建议 1、重点 2、图表重于文字 3、结果与建议 总结&#xff1a; 1、准备好渗透测试记录 测试记录是执行过程的日志&#xff0c;在每日测试工作结束后&#xff0c;应将当日的成果做成记录&#xff0c;虽然…

【Spring学习之更简单的读取和存储Bean对象】属性注入,set注入,构造方法注入

前言&#xff1a; &#x1f49e;&#x1f49e;今天我们依然是学习Spring&#xff0c;这里我们会更加了解Spring的知识&#xff0c;知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。 &#x1f49f;&#x1f49f;前路漫漫&#xff0c;希望大家坚持…

现在的00后,卷死了呀....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

数据科学之数据可视化——Tableau可视化气泡图

大家好&#xff0c;我是大鹏&#xff0c;今天给大家分享一个新的一个知识“气泡图”。 气泡图就是用气泡的大小和颜色表示不同的数据。

【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认

&#x1f4a7; 【 R a b b i t M Q 教程】第三章—— R a b b i t M Q − 发布确认 \color{#FF1493}{【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认} 【RabbitMQ教程】第三章——RabbitMQ−发布确认&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人…

青大数据结构【2020】【三分析计算】

关键字&#xff1a; 无相连通图、Prim算法最小生成树、哈希函数、线性探测法、平均查找长度 1.对于一个带权连通无向图G&#xff0c;可以采用Prim算法构造出从某个顶点v出发的最小生成树&#xff0c;问该最小生成树是否一定包含从顶点v到其他所有顶点的最短路径。如果回答是&a…

docker 网络理论知识点 - CNM 和命名空间

Network 目录 1 network namespace1.1 动手小实验 2 回到 docker2.1 driver and docker02.2 network2.3 网桥 docker0 3 总结 1 network namespace 1.1 动手小实验 网络命名空间。linux kernel 提供的网络虚拟化的功能。创建多个隔离的网络空间。每个空间内 firewall, ether …

Matplotlib学习

文章目录 Matplotlib曲线图的绘制饼图的绘制直方图的绘制散点图的绘制 Matplotlib 在深度学习的实验中&#xff0c;图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库&#xff0c;使用Matplotlib可以轻松地绘制图形和实现数据的可视化。这里&#xff0c;我们来…

Linux学习之文件信息和文件类型

使用ls -l可以看到当前目录下除隐藏文件之外的文件。 我们拿下边这行信息解释一下&#xff1a; -rw-r--r-- 1 root root 10562254 Mar 9 00:08 cmake-3.25.3.tar.gz Linux中“一切皆文件”&#xff0c;首先需要明确这点&#xff0c;因为对于不同的文件类型&#xff0c;后边的…

前后端分离项目之修改存储信息

本文章基于&#xff1a;前后端分离项目之登录页面(前后端请求、响应和连接数据库)_小俱的一步步的博客-CSDN博客 目录 一、编辑者操作步骤 二、代码实现步骤 以下以存储学生信息为例 一、编辑者操作步骤 1.在前端“编辑”按钮&#xff0c;点击时弹出弹框&#xff0c;出现…

某大厂测试开发面试总结,大家可以参考一下

目录 前言 1、RecyclerView和ListView的区别 2、技术选型的依据 3、原生monkey的原理 4、monkey和monkeyRunner区别 5、appium和uiautomator的关系或者Airtest和uiautomator的区别 6、Android进程间通信方式 7、内存溢出与内存泄露的区别及内存泄漏的原因 8、性能数据收…

mac版Excel表格中出现E+

相信很多人在使用Excel的时候都遇到过单元格变成###的情况&#xff0c;这是由于单元格列宽不够造成的&#xff0c;只需要增加列宽就可以正常显示。如果你在使用Excel的过程中遇到过出现"E"这种情况&#xff0c;此时不要惊慌&#xff0c;这是Excel自动对很大或很小的数…

C语言实现汉诺塔问题【图解和演示】

大家好&#xff0c;我是纪宁。 在高中时&#xff0c;曾有一位故友问过我类似这种移盘子的题目&#xff08;数列&#xff09;&#xff0c;我当时一脸茫然&#xff0c;上了大学才知道原来是著名的汉诺塔问题 本文&#xff0c;就将介绍汉诺问题的由来、原理、及C语言如何实现 目录…