当前位置: 首页 > news >正文

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;}}
  • 测试结果

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能学习辅助系统——后端部分
  • zigbee笔记、十五、组播通信原理
  • 【60天备战2024年11月软考高级系统架构设计师——第0天:详细规划与学习心得】
  • 为什么需要对即将上线的系统进行压力测试
  • Vue——认识day02
  • 力扣刷题--2185. 统计包含给定前缀的字符串【简单】
  • 虚幻引擎UE5入坑记
  • 2024Android面试题与答案(2)
  • 三种tcp并发服务器实现程序
  • 【C#】【EXCEL】Bumblebee/Components/Analysis/GH_Ex_Ana_CondBetween.cs
  • WPF—资源的使用
  • 速盾:整站加速和cdn的关系是怎样的?
  • 设置视图的宽高
  • day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控
  • 数据结构,顺序表和单向链表(一对一)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • JS字符串转数字方法总结
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Service Worker
  • sublime配置文件
  • 半理解系列--Promise的进化史
  • 排序(1):冒泡排序
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 入门级的git使用指北
  • 微信小程序实战练习(仿五洲到家微信版)
  • 线性表及其算法(java实现)
  • 写给高年级小学生看的《Bash 指南》
  • gunicorn工作原理
  • Java数据解析之JSON
  • 阿里云服务器购买完整流程
  • ​io --- 处理流的核心工具​
  • #职场发展#其他
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (回溯) LeetCode 40. 组合总和II
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net/c# memcached 获取所有缓存键(keys)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C#7] 1.Tuples(元组)
  • [C/C++入门][字符与ASCII码]6、用代码来转换字符与它的ASCII码
  • [C++]——带你学习类和对象
  • [Deep Learning] 神经网络基础