SpringBoot-读取配置文件方式

前言

        Spring Boot提供了多种灵活的方式来读取配置文件,以适应不同的开发和部署需求,SpringBoot启动的时候,读取配置文件的时候,首先获取的是file:/config/文件下的配置文件,也就是项目下config文件里面的配置文件,其次是file:./文件下,项目根目录下,然后是classpath:/config/,最后是classpath:/目录下,一般都使用的是最后一个。
        在项目类,有四个地方系统会自动扫描:

  1. file:/config/
  2. file:/
  3. classPath:/config/
  4. classPath:/
  • 其文件生效优先级别,从上到下,即如果在不同路径有相同属性,会优先选择上面的路径属性
  • 路径扫描顺序和其优先级别相反,后面的会覆盖前面的,并且所有路径都会扫描,形成互补

如图所示

 一、使用 @ConfigurationProperties 注解读取

        在springboot中使用 @ConfigurationProperties(prefix = "") 注解读取配置文件,一般都会指定prefix 前缀属性,例如:@ConfigurationProperties(prefix = "my.app") 就是读取配置文件中 my.app.name,my.app.list等。

代码示例

  • 定义 AppProperties 配置类
package com.demo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;/*** 文件名:AppProperties* 创建者:* 创建时间:2024-08-23* 描述: 通过 ConfigurationProperties 注解读取配置文件中前缀是 my.app的配置*/
@Data
@Component
@ConfigurationProperties(prefix = "my.app")
public class AppProperties {//String类型参数配置读取private String appName;//Properties配置中属性private String appProperties;//list列表配置对象读取private List<AppData> listData;
}
  • 定义list集合 AppData 属性对象
package com.demo.config;import lombok.Data;/*** 文件名:AppDataList* 创建者:* 创建时间:2024-08-23* 描述:配置对象*/
@Data
public class AppData {private String dataName;private String dataType;private String dataPath;
}
  • 定义配置文件属性(application.yml)
my:app:list-data:- data-name: test-1data-path: www.baidu.com-1data-type: type-1- data-name: test-2data-path: www.baidu.com-2data-type: type-2app-name: 测试名称app-properties: 测试是否覆盖
  • 添加测试接口,通过接口返回配置数据
package com.demo.config;import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 文件名:TestController* 创建者:* 创建时间:2024-08-23* 描述: 测试接口*/
@RestController
@RequestMapping("/test/")
@Data
public class AppPropertiesController {/*** 将配置加载对象注入进来*/@Resourceprivate AppProperties myAppProperties;@GetMapping("app")public Object queryCases(){Map<String,Object> map = new HashMap<>();map.put("code","1");map.put("msg","处理成功");map.put("data",myAppProperties);return map;}}
  • 响应结果

二、使用 @Value 注解读取配置文件

       在Spring框架中,@Value注解是一种用于将外部配置值注入到Spring管理的Bean中的声明式方式。@Value注解允许你将配置文件中的值(例如,来自application.properties或application.yml文件)注入到Spring Bean的字段或方法参数中。

代码示例

  • 创建配置对象
package com.demo.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;/*** 文件名:App* 创建者:* 创建时间:2024-08-26* 描述:通过 @Value 注解获取配置参数*/
@Component
@Data
public class AppConfig {//url@Value("${demo.url}")private String url;//Value方式读取列表@Value("${demo.list}")private List<String> list;//名称@Value("${demo.name}")private String name;
}
  • 创建接口测试是否读取配置属性
package com.demo.config;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;/*** 文件名:TestController* 创建者:* 创建时间:2024-08-23* 描述: 测试接口*/
@RestController
@RequestMapping("/AppConfig/")
@Data
public class AppConfigController {/*** 将配置加载对象注入进来*/@Resourceprivate AppConfig appConfig;@GetMapping("appVal")public Object queryappVal(){Map<String,Object> map = new HashMap<>();map.put("code","1");map.put("msg","处理成功");map.put("data",appConfig);return map;}
}
  • 调用接口测试结果

三、使用 Environment 类获取配置属性

        Environment是Spring Boot中一个非常有用的上下文对象,它为应用程序提供了灵活的环境感知能力,使得配置管理更加高效和动态,Environment主要提供了一种机制来区分开发、测试和生产环境的配置。

  • 代码示例
package com.demo.config;import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*** 文件名:EnvironmentController* 创建者:* 创建时间:2024-08-26* 描述: 使用Environment对象获取配置属性和环境变量信息*/
@RestController
@Slf4j
@RequestMapping("/Environment/")
@Data
public class EnvironmentController {/*** 注入 Environment 对象,使用这个对象可以获取配置文件属性*/@Resourceprivate Environment environment;@GetMapping("list")public Object queryappVal(){String demoUrl = environment.getProperty("demo.url");String name = environment.getProperty("demo.name");//获取list对象列表List<String> list =  environment.getProperty("demo.list", List.class);Map<String,Object> map = new HashMap<>();map.put("demoUrl",demoUrl);map.put("name",name);map.put("list",list);return map;}}
  • 测试结果

 

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

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

相关文章

jmeter 响应乱码

Jmeter在做接口测试的时候的&#xff0c;如果接口响应的内容中有中文&#xff0c;jmeter的响应内容很可能显示乱码&#xff0c;为了规避这种出现乱码的问题&#xff0c;就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试&#xff0c;出现以下乱码问…

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式&#xff0c;将具有相同安全需求、访问控制、相同信任级别、…

【MySQL 14】用户管理

文章目录 &#x1f308; 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 &#x1f308;二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 &#x1f308; 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…

【云原生系列之SkyWalking的部署】

1、分布式链路追踪 1.1概念 在较大的web集群和微服务环境中&#xff0c;客户端的一次请求需要经过不同的模块&#xff0c;多个不同中间件&#xff0c;多个不同机器一起相互协作才能处理完成客户端的请求&#xff0c;而在这一系列的请求过程之中,处理流程可能是串行执行,也可能…

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中&#xff0c;可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm &#xff0c;那先在小程序目录中执行命令&#xff1a; npm init -y2. …

19.神经网络 - 线性层及其他层介绍

神经网络 - 线性层及其他层介绍 1.批标准化层–归一化层&#xff08;不难&#xff0c;自学看官方文档&#xff09; Normalization Layers torch.nn — PyTorch 1.10 documentation BatchNorm2d — PyTorch 1.10 documentation 对输入采用Batch Normalization&#xff0c;可…

[数据集][目标检测]光伏发电板红外图像鸟粪检测数据集VOC+YOLO格式173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;173 标注数量(xml文件个数)&#xff1a;173 标注数量(txt文件个数)&#xff1a;173 标注类别…

sentinel安装

Releases alibaba/Sentinel GitHub java -jar sentinel-dashboard-1.8.8.jar 默认启动端口是8080 修改端口启动 java -jar sentinel-dashboard-1.8.8.jar --server.port8888 localhost:配置的端口 账密都是sentinel

本地部署Xinference实现智能体推理工作流(一)

提示&#xff1a;没有安装Docker的需要先提前安装好Docker 第一篇章 使用AutoDL平台快速部署xinference 备注&#xff1a;若使用AutoDL平台&#xff0c;以下过程使用无卡模型开机即可(省钱) 1. 下载Dify源码 Github下载Dify:https://github.com/langgenius/dify 2. 快速启动…

通过观测云 eBPF Tracing 实现无埋点的全链路追踪

前言 随着微服务架构的普及和系统复杂度的增加&#xff0c;对应用程序的可观测性要求也越来越高。传统的监控方法通常需要在应用程序中添加代码来记录和追踪重要信息&#xff0c;这种方法可能会增加系统的负担&#xff0c;并且在复杂系统中维护难度较大。 eBPF&#xff08;Ex…

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了&#xff0c;它有保存文件页面版式的优点&#xff0c;但是这个格式编辑对大部分人来说还是不那么方便&#xff0c;日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

【视频讲解】SMOTEBoost、RBBoost和RUSBoost不平衡数据集的集成分类酵母数据集、治癌候选药物|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p37502 分析师&#xff1a;Zilin Wu 在当今的大数据时代&#xff0c;科研和实际应用中常常面临着海量数据的处理挑战。在本项目中&#xff0c;我们拥有上万条数据&#xff0c;这既是宝贵的资源&#xff0c;也带来了诸多难题。一方面&a…

【递归回溯之floodfill算法专题练习】

1. 图像渲染 class Solution {int dx[4] {0, 0, -1, 1};int dy[4] {1, -1, 0, 0};int m, n;int oldcolor; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {oldcolor image[sr][sc]; // 保存原…

MySQL数据库MVCC机制底层原理详解

mvcc机制即多版本并发控制 当在事务中使用了写操作&#xff08;增删改&#xff09;语句时会给当前事务生成一个事务id&#xff0c;事务id是递增的 同时&#xff0c;对于被修改的行的数据会创建一个数据版本 &#xff0c;这个数据版本除了包含原有的字段还会包含一个事务id和一…

Linux驱动开发—创建总线,创建属性文件

文章目录 1.什么是BUS&#xff1f;1.1总线的主要概念1.2总线的操作1.3总线的实现 2.创建总线关键结构体解析2.1注册总线到系统2.2 struct bus_type *bus 解析 3.实验结果分析1. devices 目录2. drivers 目录3. drivers_autoprobe 文件4. drivers_probe 文件5. uevent 文件 4.在…

【力扣】划分为k个相等的子集

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定一个整数数组 …

【qt】锁

线程安全问题. 多线程程序太复杂了. 加锁 把多个线程要访问的公共资源&#xff0c;通过锁保护起来.>把并发执行变成串行执行. Linux mutex 互斥量. C11引入std::mutex Qt 同样也提供了对应的锁&#xff0c;来针对系统提供的锁进行封装.QMutex 多个线程进行加锁的对象&…

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

Signac R|如何合并多个 Seurat 对象 (1)

引言 在本文中演示了如何合并包含单细胞染色质数据的多个 Seurat 对象。为了进行演示&#xff0c;将使用 10x Genomics 提供的四个 scATAC-seq PBMC 数据集&#xff1a; 500-cell PBMC 1k-cell PBMC 5k-cell PBMC 10k-cell PBMC 实战 在整合多个单细胞染色质数据集的过程中&…