SpringBoot配置文件 | 多环境配置 | 读取配置的4种方式

news2025/2/24 16:10:35

文章目录

  • 一、写配置文件的位置
    • 读取的优先级:
      • 1.文件位置:
      • 2.文件名和文件后缀:
      • 3.配置文件中的profile-specific文件:
      • 4.命令行参数
  • 二、多环境配置
    • 1. properties:
    • 2. yaml
  • 三、yaml配置文件
    • yaml、properties、xml对比:
  • 四、读取配置文件
    • 1. @ConfigurationProperties(prefix="key")
    • 2. @Value("${key}")
    • 3. Environment对象
    • 4. @PropertySource(value="classpath:配置文件名")
  • 五、JSR303—参数验证
    • 常用的验证注解:




一、写配置文件的位置

  springboot官方规定了四个写配置文件的位置,位置如下:

  • file指项目文件夹
  • classpath指打包后生成的的target文件夹
    在这里插入图片描述

读取的优先级:

  优先级高会覆盖优先级低的相同配置,不同配置会互补。

1.文件位置:

  如果这四个位置都有配置文件,会按照下图的优先级读取。
在这里插入图片描述

2.文件名和文件后缀:

  Spring Boot默认会加载application.properties或application.yml文件,properties后缀的优先级更高。

application.properties > application.ym

3.配置文件中的profile-specific文件:

  可以根据激活的profile,如dev、prod等,在配置文件名后使用-{profile}来命名,这些profile-specific的配置文件将覆盖通用的配置文件中的相同属性。

例如:application-dev.properties   application-prod.yml

4.命令行参数

  最后,在启动jar包或war包时,可以指定参数值,命令行参数中指定的属性会覆盖之前加载的所有属性。

# 设置环境变量
ENV SPRING_NACOS_SERVERADDRESS='nacos.xxx.xxx:8848'
ENV SPRING_NACOS_NAMESPACE='merit-test'

# 启动jar包命令
java -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-appraise-*.jar


***

二、多环境配置

  开发、测试、生产… ,多个环境下,如何指定不同环境的配置文件,使用spring.profiles.active属性

1. properties:

在这里插入图片描述

2. yaml

在这里插入图片描述




三、yaml配置文件

  yaml支持多种数据结构,还支持表达式,但是对格式要求严格

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  1. 字符串(String):表示文本数据,可以使用单引号或双引号括起来。
name: ginjiang

# 如果字符串之中包含空格或特殊字符,需要放在引号之中
str: '内容: 字符串'

# 单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'labor''s day' 

# 多行字符串:允许在YAML中表示跨越多行的字符串,使用管道符(|)或大于符号(>)进行标识
description: |
  This is a multiline
  string in YAML.
  1. 数字(Number):表示数值数据,可以是整数或浮点数。
age: 25
pi: 3.14159
  1. 布尔值(Boolean):表示逻辑值,可以是true或false。
isStudent: true
hasCar: false
  1. 列表(List):表示有序的数据集合,使用短横线(-)作为标记,可以包含不同类型的数据。
pets:
  - cat
  - dog
  - pig
  
#行内写法  
pets: [cat,dog,pig]
  1. 字典(Dictionary)/映射(Mapping)/对象(Object):表示键值对的集合,使用冒号(:)分隔键和值。
student:
    name: qinjiang
    age: 3
 
#行内写法
student: {name:qinjiang,age:3}
  1. 字典和列表嵌套
employees:
  - name: John
    age: 25
  - name: Alice
    age: 30
  1. 空值(Null):表示空数据,使用null或~表示。
address: null
  1. 时间(Time):表示时间数据,使用ISO 8601格式表示。
timestamp: 2023-05-25T10:30:00Z
  1. 表达式
#自动生成uuid
name: ${random.uuid}

#自动生成随机数
name: ${random.int}

#占位符:student.name有值就用student.name的值,没有就用“小王”
name: ${student.name:小王}
  1. 特殊值(Special Values):YAML支持一些特殊的值,如无穷大(Infinity)、负无穷大(Negative Infinity)、非数字(NaN)等。
special_values:
  - infinity: .inf
  - negative_infinity: -.inf
  - not_a_number: .nan
  1. 引用(References):YAML允许使用引用来引用其他节点的值,使用&符号定义引用,使用*符号引用引用的值。
person: &ref
  name: John
  age: 25

employee:
  details: *ref

yaml、properties、xml对比:


特点YAMLPropertiesXML
语法结构使用缩进和冒号(:)表示层级关系使用等号(=)或冒号(:)表示键值对使用标签和元素表示层级关系
数据类型支持多种数据类型,如字符串、数字、布尔值等键值对不直接支持数据类型,通过标签定义
可读性
扩展性支持扩展自定义数据类型和对象结构不支持支持自定义标签和元素结构
嵌套支持支持不支持支持
适用场景配置文件、数据序列化和交换格式简单配置文件和属性管理复杂数据交换和配置文件



四、读取配置文件

1. @ConfigurationProperties(prefix=“key”)

  配置文件的值自动注入到实体中。
  通过在类上使用@ConfigurationProperties注解,并指定前缀,可以将配置文件中以该前缀开头的属性值绑定到对应的类的属性上。
在这里插入图片描述

2. @Value(“${key}”)

  给每个属性单独赋值。

@Configuration
public class Student{
    @Value("${person.name}")
    private String name;
}

3. Environment对象

  通过注入Environment对象,使用getProperty方法获取配置文件中的属性值。

@Component
public class MyComponent {
    @Autowired
    private Environment environment;

    public void someMethod() {
        String name = environment.getProperty("person.name");
    }
}

4. @PropertySource(value=“classpath:配置文件名”)

  指定加载配置文件。
  使用@Configuration注解和@PropertySource注解:在配置类上使用@Configuration注解,并使用@PropertySource注解指定配置文件的位置。接着使用@Value注解或Environment对象来获取属性值。

@Configuration
@PropertySource("classpath:my.properties")
public class Student{
    @Value("${person.name}")
    private String name;
}



五、JSR303—参数验证

  @Validated 是 Spring Framework 中的一个注解,它用于在方法参数、方法返回值或类级别上启用方法参数验证(Method Parameter Validation)。它基于 JSR-303(Bean Validation)规范,提供了一种方便的方式来对方法参数进行验证。
在这里插入图片描述

常用的验证注解:

  • @NotNull:验证参数值不为 null。

  • @NotBlank:验证字符串参数不为空(不为 null、不为空字符串、不包含空格)。

  • @NotEmpty:验证集合或数组参数不为空。

  • @Min(value):验证数字参数的最小值。

  • @Max(value):验证数字参数的最大值。

  • @Size(min, max):验证字符串、集合或数组参数的长度或大小是否在指定范围内。

  • @Pattern(regex):验证字符串参数是否匹配指定的正则表达式。

  • @Email:验证字符串参数是否为有效的电子邮件地址。

  • @Valid:递归验证嵌套对象或集合的元素。

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

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

相关文章

【软考-中级】系统集成项目管理工程师 【13合同管理】

持续更新。。。。。。。。。。。。。。。 【第十三章】合同管理 2 分 考点 1考点 2考点 3考点4:成本补偿合同考点5:工料合同考点6:合同类型的选择考点 7考点 8:合同管理包括考点9考点 10考点 11考点 12考点 13考点 14考点 15历年真题2022 年 05 月2021 年 11 月2021 年 05 月 考…

Redis底层原理深入学习

一、基本类型及底层实现 1.String 1)使用场景:简单字符串存储、分布式锁、计数器、全局唯一ID 2)数据结构:C语言中String用char[]表示,源码中用SDS封装char[],这是Redis存储的最小单元,一个SD…

安全中级3-nginx反向代理负载均衡的webshell

目录 一、负载均衡 1.nginx的负载均衡 2.nginx 支持的几种策略: 二、负载均衡下的webshell连接(负载均衡下的wenbshell环境下载地址) 1.内部网络的结构 2.场景描述 3.利用我们的中国蚁剑连接我们的代理服务器nginx 三、webshell遇到的…

电脑待机或者睡眠后TeamViewer就无法连接了

电脑待机或者睡眠后TeamViewer就无法连接了 设置睡眠状态下不关闭网卡驱动 公司的笔记本,安装了teamviewer,离开时把teamviewer打开,回家后连接时提示伙伴未在机器上运行,此时电脑处于黑屏、待机、睡眠状态 其实电脑睡眠后会关掉网…

创新管理工具:低代码平台在学校管理中的应用实践

随着信息技术的不断发展,学校管理也随之发生了变革。传统的学校管理方式往往是依靠人工操作,存在信息不透明、效率低下等问题,而数字化管理的出现,可以帮助学校提高管理效率、降低管理成本、提升数据统计和分析能力。而低代码技术…

SWAT模型教程

详情点击链接:SWAT模型教程详情点击链接:SWAT模型(建模方法、实例应用、高级进阶) 一:基于网络资源的SWAT模型快速建模​ 二:基于遥感产品的SWAT模型率定与验证​ 三:基于水文响应单元&#xff…

相机光圈和快门

相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…

记一次 Android 源码编译刷机过程

0 背景 为了能在开发设备上运行 adb root 命令得到 root 权限,获得更加强大的调试能力、开发体验,方便以后阅读源码时 Debug 跟踪、进行定制化开发,需要编译 Android 源码 userdebug 版本并刷入手机当中。 1 准备 1.1 硬盘 首先 Android 源…

新星计划 Electron+vue2 桌面应用 2 项目编写

练手的项目,需求简单,打算做平面设计社交类的软件。 一、需求 练手用,简单处理,写个简单的记事本,本地保存txt,能导出为其他格式的文件。 获取用户的网卡地址用于数据加密,本地保存加密后的文…

想变身“科技型”企业?掌汇云数字化服务平台为工业升级加分

40万亿元!占GDP比重达到33.2%,这就是国新办公布的2022年数据,中国工业可以说是当之无愧的支柱产业。 中国工业规模大、覆盖面广,企业员工众多,项目遍及海内外。但由于科技欠发达、信息不流通等因素,近些年…

IDEA中 lombok不生效解决方法

目录 前言: springboot启动的时候报错, 说没有lombok编译器 第一步: 检查插件lombok是否存在 第二步: 查看springboot 官方推荐的lombok版本 -> 2.1 第一步 找到这个parent ctrl点进去 -> 2.2 在点红框位置 进去 -> 2.3 ctrlf 搜索一下 lombok.version 复制这个…

[论文评析]mixup: B EYOND E MPIRICAL R ISK M INIMIZATION, ICLR 2018,

mixup: B EYOND E MPIRICAL R ISK M INIMIZATION 介绍MixupMixup的提出动机Mixup与常规数据增广方法的区别References 介绍 采用ERM训练的模型往往存在泛化能力差的情形-可能是在简单的记忆样本, 对于噪声干扰的鲁棒性很差. 这篇论文提出了一种新的数据增广方法-Mixup, 这里主…

【ChatGPT】不会用ChatGPT?这几个镜像网站解决你的烦恼。

个人主页:【😊个人主页】 文章目录 前言ChatGPT介绍WoChatA TalkChatGPT Next WebAI EDUCHATGPTSITES 前言 还在为需要魔法才能与ChatGPT见上一面而叹息吗,今我就为大家汇总了国内能使用ChatGPT的方法。 也就是用国内的镜像网站玩ChatGPT&…

javaWeb 酒店民宿预定信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh酒店民宿预定信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为T…

2023阿里云学生服务器权益,含Clouder认证:云服务器ECS答案

文章目录 阿里云学生权益(服务器使用7个月)1、高校计划续费任务 - 飞天加速计划3.0(2个任务)2、任务1:完成实验《ECS云服务器新手上路》2.2: 续费6个月 3、任务2:Apsara Clouder云计算专项技能认…

【多线程】线程的可见性

目录 一、什么是线程的可见性二、可见性问题示例2.1 代码2.2 截图 三、解决可见性问题3.1 volatile关键字3.2 synchronized关键字 四、用volatile关键字解决可见性问题示例4.1 代码4.2 截图 五、用synchronized关键字解决可见性问题示例5.1 代码5.2 截图 六、可见性与原子性 一…

( 数组) 59. 螺旋矩阵 II ——【Leetcode每日一题】

❓59. 螺旋矩阵 II 难度:中等 给你一个正整数 n ,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5…

如何动态显示物品提示?

UE5 插件开发指南 前言0 提示信息窗口类前言 为了使物品的排列简洁,各种游戏里的物品信息都是以提示的形式展示出来,而不是整个铺排陈列,只需要玩家鼠标悬停在物品上就自动显示出提示窗口,如下图所示: 这些提示信息在物品定义数据资产中已经定义了,所以这里要做的只是将…

大数据赋能商业地产研策

商业地产是城市经济的重要支柱,也是城市形象的重要名片。在消费者需求日益多元和个性化的背景下,商业地产面临着激烈的市场竞争和运营效率的挑战。如何在复杂多变的市场环境中,做出科学合理的投资决策和运营策略,是商业地产企业的…

Emacs之高效切换窗口(九十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…