【Spring】——15、使用@PropertySource加载配置文件

news2024/11/25 18:36:04

在这里插入图片描述

📫作者简介:zhz小白
公众号:小白的Java进阶之路
专业技能:
1、Java基础,并精通多线程的开发,熟悉JVM原理
2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线上调优经验
3、熟悉MySQL数据库调优,索引原理等,⽇志原理等,并且有出过⼀篇专栏
4、了解计算机⽹络,对TCP协议,滑动窗⼝原理等有⼀定了解
5、熟悉Spring,Spring MVC,Mybatis,阅读过部分Spring源码
6、熟悉SpringCloud Alibaba体系,阅读过Nacos,Sentinel,Seata,Dubbo,Feign,Gateway核⼼源码与设计,⼆次开发能⼒
7、熟悉消息队列(Kafka,RocketMQ)的原理与设计
8、熟悉分库分表ShardingSphere,具有真实⽣产的数据迁移经验
9、熟悉分布式缓存中间件Redis,对其的核⼼数据结构,部署架构,⾼并发问题解决⽅案有⼀定的积累
10、熟悉常⽤设计模式,并运⽤于实践⼯作中
11、了解ElasticSearch,对其核⼼的原理有⼀定的了解
12、了解K8s,Jekins,GitLab
13、了解VUE,GO
14、⽬前有正在利⽤闲暇时间做互游游戏,开发、运维、运营、推销等

本人著作git项目:https://gitee.com/zhouzhz/star-jersey-platform,有兴趣的可以私聊博主一起编写,或者给颗star
领域:对支付(FMS,FUND,PAY),订单(OMS),出行行业等有相关的开发领域
🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~

文章目录

  • 1、PropertySource介绍
  • 2、使用
    • 2.1、pom
    • 2.2、yml
    • 2.3、后置处理器
    • 2.4、启动类

1、PropertySource介绍

通过@PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文件中的值,参数是properties配置文件中定义的key值。

其源代码如下:
在这里插入图片描述

细心的朋友,应该发现其里面还有个@PropertySources注解了吧,是不是跟@ComponentScan一样了,具体的大家可以回顾前面讲的@ComponentScan的详解,他就是个复用注解,代表我们的@PropertySource可以用多个。
在这里插入图片描述

2、使用

  • PropertySource
    • 添加 PropertySource
      • context:property-placeholder
      • PropertySourcesPlaceholderConfigurer
        • PropertyPlaceholderConfigurer
      • @PropertySource
      • @PropertySources
  • Spring Boot 中的 @ConfigurationProperties
    • 可以将属性绑定到结构化对象上
    • ⽀持 Relaxed Binding
    • ⽀持安全的类型转换
    • @EnableConfigurationProperties
  • 定制 PropertySource
    • 主要步骤
      • 实现 PropertySource
      • 从 Environment 取得 PropertySources
      • 将⾃⼰的 PropertySource 添加到合适的位置
    • 切⼊位置
      • EnvironmentPostProcessor
      • BeanFactoryPostProcessor

作用:可以用于读取配置文件,比如我们正常的nacos就是用这个做的。

2.1、pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zhz</groupId>
    <artifactId>spring-boot-property-source-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-property-source-demo</name>
    <description>Spring Boot集成PropertySource</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2、yml

resource/yapf.properties

spring.boot.zhz.property.source=hello

resource/META-INF/spring.factories

org.springframework.boot.env.EnvironmentPostProcessor=com.zhz.springbootpropertysourcedemo.processor.YapfEnvironmentPostProcessor

2.3、后置处理器

package com.zhz.springbootpropertysourcedemo.processor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.env.PropertiesPropertySourceLoader;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * @author zhouhengzhe
 * @Description: TODO
 * @sign: 代码虐我千百遍,我视代码如初恋
 * @date 2021/8/25上午12:51
 */
@Slf4j
public class YapfEnvironmentPostProcessor implements EnvironmentPostProcessor {
    private PropertiesPropertySourceLoader loader=new PropertiesPropertySourceLoader();

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        MutablePropertySources propertySources = environment.getPropertySources();
        Resource resource = new ClassPathResource("yapf.properties");
        try {
            PropertySource ps = loader.load("YetAnotherPropertiesFile", resource).get(0);
            propertySources.addFirst(ps);
        } catch (Exception e) {
            log.error("Exception!", e);
        }
    }
}

2.4、启动类

package com.zhz.springbootpropertysourcedemo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author mac
 */
@Slf4j
@SpringBootApplication
public class SpringBootPropertySourceDemoApplication implements ApplicationRunner {

    @Value("${spring.boot.zhz.property.source}")
    private String propertySource;

    public static void main(String[] args) {
        SpringApplication.run(SpringBootPropertySourceDemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("{}",propertySource);
    }
}

在这里插入图片描述

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

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

相关文章

【Java】Java异常Exception和Error有什么区别?

异常处理Exception 和 Error 的区别try-catch代码块总结写程序就需要考虑程序中是否有异常&#xff0c;如果存在异常应该如何处理比较友好。Java 语言在设计之初就提供了相对完善的异常处理机制&#xff0c;这也是 Java 得以大行其道的原因之一&#xff0c;因为这种机制大大降低…

三方线上美食城|基于Springboot的三方线上美食商城系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Neo4j 实战(一)-- Mac neo4j 安装与配置

前言 Neo4j是一个高性能的&#xff0c;Nosql图形数据库。Nosql &#xff1d;no sql&#xff0c;即与传统的将数据结构化并存储在表中的数据库不一样。Neo4j将数据存储在网络上&#xff0c;我们也可以把Neo4j视为一个图引擎。我们打交道的是一个面对对象的、灵活的网络结构而不是…

【消息中间件】RocketMQ底层如何实现生产者发送消息

目录 一、前言 二、实现生产者发送消息 1、启动生产者 1.1、RocketMQTemplate消息发送模板 1.2、afterPropertiesSet()逻辑 1.3、DefaultMQProducer#start()逻辑 2、DefaultMQProducer#start()启动逻辑 2.1、更新路由信息到本地 2.2、从本地获取主题Topic信息 2.3、数…

flink on yarn

文章目录flink sql client on yarnsession 模式Per-Job Cluster 模式flink run安装完hadoop 3.3.4之后&#xff0c;启动hadoop、yarn 将flink 1.14.6上传到各个服务器节点&#xff0c;解压 flink sql client on yarn https://nightlies.apache.org/flink/flink-docs-release…

SQL注入

目录 一、SQL注入原理 二、SQL注入的危害 三、SQL注入的分类 四、SQL注入的流程 五、总结 一、SQL注入原理 1.SQL注入产生的原因&#xff1a; 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理&#xff0c;那么攻击者就可以构造…

面试真题 | 需求评审中从几个方面发现问题

面试官问题 在需求评审会议中&#xff0c;你会发现什么问题&#xff1f; 在需求评审时&#xff0c;是通过哪几个角度来进行考虑及发现问题的&#xff1f; 考察点 是否参加过需求评审 在需求评审过程中是否能提出有效的问题 4个角度发现问题 在需求评审的过程中通过以下4个…

【Vue 快速入门系列】一文透彻vue中使用axios及跨域问题的解决

文章目录一、什么是Axios&#xff1f;1.前置知识2.vue中使用axios3.Axios两种请求方式①.调用接口②.传入对象3.Axios支持的请求类型①.get请求②.post请求③.put请求④.patch请求⑤.delete请求二、跨域问题解决方案1.什么是跨域问题&#xff1f;2.解决方案一&#xff1a;在Vue…

基于微信小程序的社区心理健康服务-计算机毕业设计

项目介绍 社区心理健康服务平台小程序采用java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户、咨询师三部分&#xff0c;管理员服务端&#xff1a;首页、个人中心、用户管理、咨询师管理、心理书籍管理、相关资源管理、试卷管理、试题管理、系统管理、订单管理&…

希沃 API 网关架构演进之路

网关往期迭代与痛点 希沃网关的发展经历了四个版本的迭代。2013 年公司开始尝试互联网业务&#xff0c;那时候采用了 OpenRestyNGINX 静态配置的方式搭建了最初的网关&#xff0c;开发人员通过 SCP 来发布。与此同时一个比较严重的问题就是&#xff0c;每次上线发布都需要运维…

喜讯+1!袋鼠云数栈技术团队获“2022年度优秀开源技术团队”

近日&#xff0c;在“开源中国&#xff08;OSCHINA&#xff09;”开展的年度评选中&#xff0c;袋鼠云数栈技术团队凭借在2022年间的技术分享频率及质量、运营积极性等多方面的表现&#xff0c;荣获“2022年度优秀开源技术团队”的称号&#xff0c;这也是袋鼠云数栈技术团队连续…

umi学习总结

文章目录umi介绍umi是什么&#xff1f;umi的特性开发环境Node.js依赖管理工具目录结构路由配置路由页面跳转Link组件路由组件参数&#xff1a;路由动态参数query信息样式使用css样式dva为什么需要状态管理umi如何管理状态umi介绍 umi是什么&#xff1f; Umi&#xff0c;中文发…

自定义委托类

setItemDelegete();该函数可以自定义委托类 该例子为Qt官网的一个例子&#xff1a;使用QSpinBox来提供编辑功能 首先创建一个项目&#xff1a;名为object在项目中添加一个c类&#xff0c;类名为SpinBoxDelegate 修改该类的基类&#xff1a;更改为QImageDelegate,然后需要添加重…

12/15历史上的今天

宜找代驾 星期四 农历十一月廿二 今夜无人拥你入怀不如喝完杯中酒走入夜色中踏上回家的归途 *约翰-梅尔西藏墨脱公路嘎隆拉隧道顺利贯通 2010年12月15日&#xff0c;西藏墨脱公路控制性工程——嘎隆拉隧道顺利贯通。   2010年12月15日西藏墨脱公路控制性工程——嘎隆拉隧道…

华为开源自研AI框架昇思MindSpore应用实践:RNN实现情感分类

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据准备1.数据下载模块2.加载IMDB数据集2.加载预训练词向量三、数据集预处理四、模型构建1.Embedding2.RNN(循环神经网络)3.Dense4.损失函数与优化器5.训练逻辑6.评估指标和逻辑五、模型训练与保存六、模…

电脑重装系统后卡顿怎么办?教你快速解决电脑卡顿问题

​Win10电脑卡顿怎么办&#xff1f;许多用户在使用电脑的过程中发现&#xff0c;随着使用时间的增加&#xff0c;电脑会越来越卡顿。有些小伙伴就会选择重装电脑系统&#xff0c;那么我们在重装电脑之后要进行什么操作才能让电脑不卡顿呢&#xff1f; 操作方法&#xff1a; 优化…

java学生成绩管理系统源码swing(GUI) MySQL带开发教程永久学习

今天给大家演示一款由Java swing即GUI和mysql数据库实现的&#xff0c;学生成绩管理系统&#xff0c;系统采用了MVC的设计模式&#xff0c;结构层次非常清晰&#xff0c;此外&#xff0c;该项目有手把手的开发教程&#xff0c;适合刚入门Java的学生学习&#xff0c;下面我们来看…

Pr:导出设置

◆ ◆ ◆导出设置&#xff08;媒体文件&#xff09;Export Settings&#xff08;Media File&#xff09;基本设置文件名File Name指定导出的文件名。位置Location可以点击蓝色字更改导出的文件的存放位置。预设Preset选择导出预设。匹配源 Match Source预设会将大多数设置与源…

[附源码]Python计算机毕业设计高校贫困生信息管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Mysql 查询获取 为数字的 字符串

先看示例数据: test_value 字段 为 VARVCHAR 类型 数据样例&#xff1a; 包含 纯数字&#xff0c; 带小数点的数字&#xff0c; 字符串 获取里面的纯数字 &#xff1a;使用正则匹配 函数 REGEXP &#xff0c;返回 1代表不匹配&#xff0c; 返回 0 代表匹配 包含小数点 [^0-…