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

文章目录

  • 一、写配置文件的位置
    • 读取的优先级:
      • 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.mfbz.cn/a/22782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

OpenAI ChatGPT Unity接入

OpenAI ChatGPT Unity接入 OpenAI ChatGPT Unity接入OpenAi-API-Unity 方法OpenAi-API-Unity 下载本地配置Unity 模块URL接入gz 接入json 接入Open AIOpenAi-Api-Unity 插件文档 OpenAi 本地化接入 Unity 方法Unity 关键字识别语音合成 & 文字转语音音频记录 & 实时音频…

C语言_数据类型[详细分析]

接上一篇:C语言_关键字_标识符简介 本次来分享C语言的数据类型,是博主的一些学习笔记的和心得的总结,话不多说,开始上菜: 此博主在CSDN发布的文章目录:我的CSDN目录,作为博主在CSDN上发布的文章…

四个PCB工程师最头痛的Allegro问题及解答,你一定要看

Allegro是一款功能强大的PCB设计软件,广泛应用在电子设计行业,在使用Allegro过程中,工程师会遇见到多种复杂的技术问题,本文将针对工程师最头痛的Allegro问题进行回答,希望对小伙伴们有所帮助。 1、如何创建新的Allegr…

线上问题处理案例:出乎意料的数据库连接池 | 京东云技术团队

导读 本文是线上问题处理案例系列之一,旨在通过真实案例向读者介绍发现问题、定位问题、解决问题的方法。本文讲述了从垃圾回收耗时过长的表象,逐步定位到数据库连接池保活问题的全过程,并对其中用到的一些知识点进行了总结。 一、问题描述…

高丰度铈磁体

随着烧结钕铁硼应用领域的不断拓展和产量的快速增长,相应的稀土资源也被大量开采。稀土矿中各种稀土元素是共生的,但在钕铁硼的制备过程中,利用的主要是在轻稀土中质量分数为25%的镨Pr和钕Nd元素,这样对轻稀土中占比为质量分数49%…

AIGC周报|让AI来画《海贼王》;苹果限制员工使用ChatGPT;李彦宏:不担心大模型会让工作消失

AIGC(AI Generated Content)即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT,以及 DallE 2、Stable Diffusion 等文生图模型,都属于 AIGC 的典型案例,它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

MySQL备份

MySQL的备份方式有哪几种?分别如何实现? 目录 一、数据的备份类型 1、数据的备份类型根据其自身的特性主要分为以下几组: 二、MySQL备份数据的方式 三、常见的备份工具 1、一般情况下, 我们需要备份的数据分为以下几种 2、备份工具 3…

SpringBoot—常用注解

目录 一、注解(annotations)列表 二、注解(annotations)详解 三、JPA注解 四、springMVC相关注解 五、全局异常处理 一、注解(annotations)列表 SpringBootApplication: 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan…

【大学物理实验】基本测量

50分度的游标卡尺,最小分度为: A. 0.1mm B. 0.2mm C. 0.5mm D. 0.02mm 正确答案: D 保存游标卡尺和螺旋测微器是,下面说法正确的是: A. 游标卡尺测量位置应闭合,螺旋测微器小砧和螺杆间隙也应闭合 B. 游标…

Matlab论文插图绘制模板第94期—带置信区间的折线散点图

在之前的文章中,分享了很多Matlab带置信区间的折线图的绘制模板: 进一步,再来分享一下带置信区间的折线散点图的绘制模板。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友…

SSD202 Linux开发日志记录

一、挂载U盘 SDK默认自动加载USB存储模块,但没有自动挂载,插上U盘后识别sda mount /dev/sda /mnt/即可在/mnt查看U盘文件 二、make & make menuconfig提示失败 打开新终端后输入 declare -x ARCH"arm" declare -x CROSS_COMPILE"…

机器学习中四类进化算法的详解(遗传算法、差分进化算法、协同进化算法、分布估计算法)

1、遗传算法(Genetic Algorithm,GA) GA算法原理 首先我们来介绍进化算法的先驱遗传算法,遗传算法(Genetic Algorithm,简称GA)是一种最基本的进化算法,它是模拟达尔文生物进化理论的…

企业级WordPress开发 – 创建企业级网站的优秀提示

目录 “企业级”是什么意思? 使用WordPress创建企业级网站有什么好处? 使用 WordPress 进行企业开发的主要好处 WordPress 可扩展、灵活且价格合理 WordPress 提供响应式 Web 开发 WordPress 提供了巨大的可扩展性 不断更新使 WordPress 万无一…

Nodejs模块化

介绍 将一个复杂的程序文件按照一定规则拆分成多个文件。 拆分出的每个文件就是一个模块,模块的内容数据是私有的,不过模块可以暴露内部数据使得其他模块使用。 模块化好处:防止命名冲突、高复用性、高维护性。 模块化的使用 初体验 两…

云计算基础——云计算与移动互联网、物联网

8.1 云计算与移动互联网 8.1.1 移动互联网的发展概况 移动互联网的发展概况 移动互联网是指以宽带IP为技术核心,可同时提供语音、数据、多媒体等业务服务的开什么是移动互联网?放式基础电信网络,从用户行为角度来看,移动互联网广义上是指用…

Linux下的用户分类与su/sudo 命令,Linux下的文件类型/用户文件权限身份/文件权限属性/权限与文件权限/ls-l文件属性详解

Tips 下载就是把我们的文件拷贝到系统的某个特定路径之下,普通用户是不允许你往系统里面去拷的。 Linux下的用户分类 root用户,管理员级别的用户身份,他的话基本上不受权限的约束。普通用户,普通用户的添加与每个普通用户密码的…

8.防火墙-SNAT和DNAT

文章目录 SNAT-内网客户访问外网服务原理操作实验 DNAT-外网客户访问内网服务原理操作实验 tcpdump SNAT-内网客户访问外网服务 原理 由内网到外网:从内网发到外网的数据包的源IP由私网IP转换成公网IP 由外网到内网:从外网发到内网的数据包的目的IP由公…

学系统集成项目管理工程师(中项)系列24a_信息系统集成专业技术知识(上)

1. 信息系统的生命周期 1.1. 【19下选10】 1.2. 立项 1.2.1. 形成《需求规格说明书》并确定立项 1.2.1.1. 【21上选11】 1.3. 开发 1.3.1. 【22下选10】 1.3.2. 以立项阶段所做的需求分析为基础,进行总体规划。之后,通过系统分析、系统设计、系统…

若依框架在未登录的情况下访问swagger3.0页面,出现弹窗的解决方法

若依框架在未登录的情况下访问swagger3.0页面,出现弹窗的解决方法 效果展示: 解决方法:在ShiorConfig.java类中找到shiroFilterFactoryBean方法,然后在filterChainDefinitionMap里面put你要过滤的地址,如下&#xff…
最新文章