SpringBoot-读取配置文件方式

目录

前言

一. 使用 @ConfigurationProperties 注解读取

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

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


前言

        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.rhkb.cn/news/416220.html

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

相关文章

[Linux] 项目自动化构建工具-make/Makefile

标题&#xff1a;[Linux] 项目自动化构建工具-make/Makefile 水墨不写bug 目录 一、什么是make/makefile 二、make/makefile语法 补充&#xff08;多文件标识&#xff09;&#xff1a; 三、make/makefile原理 四、make/makefile根据时间对文件选择操作 正文开始&#xff…

在安卓和Windows下使用Vizario H264 RTSP

Unity2021.3.35f1&#xff0c;运行模式为ENGINE_SERVER 1.环境设置 Windows设置 安卓设置 2.代码修改 ConnectionProperties中的server必须与真实IP一样&#xff0c;所以需要新增一个获取IP的函数 public string GetLocalIPAddress(){IPHostEntry host;string localIP &quo…

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释 问题描述第一个奇怪的bug&#xff1a;新建的工程没有SoftMotion General Axis Pool选项第二个奇怪的bug&#xff1a;在新建工程SoftMotion General Axis Pool选项时&#xff0c;无法手动添加第三个奇怪的bug&#xff1a;虚…

Postgresql碎片整理

创建pgstattuple 扩展 CREATE EXTENSION pgstattuple 获取表的元组&#xff08;行&#xff09;信息&#xff0c;包括空闲空间的比例和行的平均宽度 SELECT * FROM pgstattuple(表名); 查看表和索引大小 SELECT pg_relation_size(表名), pg_relation_size(索引名称); 清理碎片方…

如何进行 AWS 云监控

什么是 AWS&#xff1f; Amazon Web Services&#xff08;AWS&#xff09;是 Amazon 提供的一个全面、广泛使用的云计算平台。它提供广泛的云服务&#xff0c;包括计算能力、存储选项、网络功能、数据库、分析、机器学习、人工智能、物联网和安全。 使用 AWS 有哪些好处&…

AI预测体彩排3采取888=3策略+和值012路或胆码测试9月4日升级新模型预测第72弹

经过70多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大部…

亚信安全信立方安全大模型荣获“磐石·Y”大模型安全评定

2024年4月&#xff0c;在中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&#xff09;联合数据安全关键技术与产业应用评价工业和信息化部重点实验室、中国计算机行业协会数据安全专业委员会开展的大模型安全性测评“磐石X”榜单计划中&#xff0c;亚信安全…

PTA L1-041 寻找250

L1-041 寻找250&#xff08;10分&#xff09; 对方不想和你说话&#xff0c;并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式&#xff1a; 输入在一行中给出不知道多少个绝对值不超过1000的整数&#xff0c;其中保证至少存在一个“2…

Java_jdk安装配置~java入门

目录 0.总体介绍 1.入门介绍 2.官网 3.关于版本的问题 4.环境变量配置 5.编码修改 6.创建项目 0.总体介绍 下面的这个情况比较复杂&#xff0c;因为遇到了一些别人没有遇到的问题&#xff0c;我会把自己遇到这个问题&#xff0c;到解决这个问题的过程尽可能详细的展示出…

Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成

Qt 字符串的编码方式 问题 总所周知&#xff0c;Qt的ui文件在编译时&#xff0c;会自动生成一个ui_xxxxx.h的头文件&#xff0c;打开一看&#xff0c;其实就是将摆放的控件new出来以及布局的代码。 只要用Qt提供的uic.exe工具&#xff0c;自己也可以将ui文件输出为代码文件…

设计模式 —— 单例模式

文章目录 一、单例模式1.1 单例模式定义1.2 单例模式的优点1.3 单例模式的缺点1.4 单例模式的使用场景 二、普通案例2.1 饿汉式单例模式(Eager Initialization Singleton)2.2 懒汉式单例模式(Lazy Initialization Singleton) 参考资料 本文源代码地址为 java-demos/singeleton-…

Leetcode236经典题目二叉树的最近公共祖先

本次为大家带来的题目是leetcode236二叉树的最近公共祖先 本道题的直观思路是自底向上进行寻找&#xff0c;如果存在的话那么向上返回&#xff0c;如何能够自底向上遍历呢&#xff1f;我们可以利用回溯进行处理&#xff0c;那么需要注意的是进行回溯的时候一定要使用后序遍历来…

too many blocks in cooperative launch at cudaLaunchCooperativeKernel

在使用cudaLaunchCooperativeKernel时出现&#xff1a; cudaErrorCooperativeLaunchTooLarge (error 82) due to “too many blocks in cooperative launch” on CUDA API call to cudaLaunchCooperativeKernel. 问题&#xff1a; 在使用cudaLaunchCooperativeKernel时&…

总线操作与定时

目录 一. 总线定时1.1 同步通信&#xff08;同步定时方式&#xff09;1.2 异步通信&#xff08;异步定时方式&#xff09;1.3 半同步与分离式通信&#xff08;了解即可&#xff09; 二. 总线标准&#xff08;了解即可&#xff09;2.1 总线标准的概念2.2 系统总线标准2.3 局部总…

新电脑Win11系统想要降级为Win10怎么操作?

前言 现在的电脑大部分都是Windows 11系统&#xff0c;组装机还好一些&#xff0c;如果想要使用Windows 10&#xff0c;只需要在安装系统的时候选择Windows 10镜像即可。 但是对于新笔记本、厂商的成品机、一体机来说&#xff0c;只要是全新的电脑&#xff0c;基本上都是Wind…

Windows中Git对文件名大小写不敏感的问题解决方法

文章目录 前言一、Git 对文件名大小写不敏感方法1.使用git命令进行修改方法2.关闭git 忽略大小写配置 &#xff08;可以当前项目设置&#xff0c;也可以全局设置 --global&#xff09; 二、新的问题&#xff08;重复的目录&#xff09;原因分析解决方法 前言 Git是一个免费的、…

C#使用MQTT(一):MQTT服务端

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; 即时通讯协议&#xff0c; 开发商 IBM MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状…

【图论】Dijkstra算法求最短路

一、Dijkstra算法简介 Dijkstra算法是由河南荷兰计算机科学家狄克斯特拉(Dijkstra)于1959年提出的,因此又叫狄克斯特拉算法。 二、初识Dijkstra算法 在使用Dijkstra算法求最短路时&#xff0c;需要用到三个辅助数组&#xff1a; v i s x vis_x visx​&#xff1a;布尔数组&…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.3 存储器

这一章&#xff0c;前面不难&#xff0c;后面难。 教你别这么连线连出问题。 看结果说话&#xff0c;延迟两个时刻输出。 先不管要求&#xff0c;输出一个稳定的信号&#xff0c;看看之前给了延迟元件正好延迟一刻&#xff0c;然后作为输入和那个稳定的信号做一个逻辑运算改变…

国内可以免费使用的gpt网站【九月持续更新】

GPT Hub 是我最近使用的一款智能文本生成工具平台&#xff0c;它支持多种AI模型&#xff0c;包括最新的GPT-4模型&#xff0c;并且可以在国内网络环境中直接访问。以下是我在使用过程中发现的一些特点&#xff1a; 多功能支持&#xff1a;不仅支持代码生成&#xff0c;还涵盖了…