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

springboot给属性赋值的两种方式(yaml与properties)

一,介绍

        在Spring Boot中,配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件:properties文件和YAML 文件。这两种文件都可以用来定义相同的配置,但它们在格式和表达能力上有所不同。

二,Properties 配置方式

  properties文件是Java平台最传统的配置方式,文件扩展名为 .properties。这种格式非常简单,主要由键值对组成,每一对键值对设置一个配置属性。
示例:
定义模型Person类:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix="person")
public class Person {private String name;private int age;private String uuid;private Dog dog;// standard getters and setterspublic static class Dog {private String name;private String breed;// standard getters and setters}
}
Properties 配置
person.name=John Doe
person.age=35
person.uuid=${random.uuid}
person.dog.name=Rex
person.dog.breed=Labrador
         这样配置后,Spring Boot 会自动application.properties中的相关配置注入到 Person对象和其内部的 Dog对象。
使用 @Value注解也可以直接在 Spring Boot 应用中注入配置值,例
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class Person {@Value("${person.name}")private String name;@Value("${person.age}")private int age;@Value("${person.uuid}")private String uuid;// 内部类和其他配置略
}

三,YAML 配置方式

  YAML 是一种层次结构化的数据格式,相比于 properties文件,它支持列表和嵌套的对象,使得配置更加清晰和组织化。
        yaml配置:
person:name: "John Doe"age: 35uuid: ${random.uuid}dog:name: "Rex"breed: "Labrador"
        这时要将YAML文件中的配置自动映射到一个Java类中,需要在Spring Boot应用中定义相应的配置类,并使用@ConfigurationProperties注解。
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private int age;private String uuid;private Dog dog;@Componentpublic static class Dog {private String name;private String breed;// getters and setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getBreed() {return breed;}public void setBreed(String breed) {this.breed = breed;}}
}

四,对比

1. 可读性

  • YAML 由于其支持层级结构,通常在表达更复杂的配置时更加清晰和易读。
  • Properties 文件更适合简单的平面键值对,但在需要表达嵌套配置时可读性较差。

2. 表达能力

  • YAML 支持复杂的数据结构,如列表和字典(即嵌套的对象),这使得它在表达如安全规则、路由配置等复杂配置时非常有用。
  • Properties 文件不支持直接的层级或复杂结构,所有结构都必须通过点分隔的方式平铺开来表达。

3. 错误检测

  • YAML 文件由于格式更加复杂,对缩进非常敏感,错误的缩进可能导致整个文件无法解析。
  • Properties 文件结构简单,缩进和格式错误的容忍度较高。

4. 使用场景

  • 如果配置较为简单,或是迁移遗留项目而不希望引入新的复杂性,那么使用.properties可能更合适。
  • 对于新项目或需要表达复杂配置的情况,.yaml提供了更强的表达能力和更好的可读性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大学生算法高等数学学习平台设计方案 (第一版)
  • 昇思25天学习打卡营第22天|CV-Vision Transformer图像分类
  • MySQL 和 SQL Server 中的连表更新 UPDATE JOIN 写法比较
  • Webshell管理工具:AntSword(中国蚁剑)
  • CentOS怎么关闭自动锁屏?
  • 【学一点儿前端】本地或jenkins打包报错:getaddrinfo ENOTFOUND registry.nlark.com.
  • Docker学习与实战
  • SpringSecurity如何正确的设置白名单
  • MySQL中多表查询之外连接
  • 网络基础之(11)优秀学习资料
  • Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级
  • 蓝桥杯 2024 年第十五届省赛真题 —— 最大异或结点
  • Linux系统编程——生产者消费者模型
  • python基础---2.流程控制及函数
  • 2024Summer周报三
  • React-redux的原理以及使用
  • Spring框架之我见(三)——IOC、AOP
  • V4L2视频输入框架概述
  • vue脚手架vue-cli
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 如何进阶一名有竞争力的程序员?
  • 数据结构java版之冒泡排序及优化
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​马来语翻译中文去哪比较好?
  • $.proxy和$.extend
  • (16)Reactor的测试——响应式Spring的道法术器
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (三) diretfbrc详解
  • (三)c52学习之旅-点亮LED灯
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)关于多人操作数据的处理策略
  • .dwp和.webpart的区别
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net环境下的缓存技术介绍
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .py文件应该怎样打开?
  • .sys文件乱码_python vscode输出乱码
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [023-2].第2节:SpringBoot中接收参数相关注解
  • [12] 使用 CUDA 进行图像处理
  • [5] CUDA线程调用与存储器架构
  • [Android]创建TabBar
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C#]winform基于opencvsharp结合Diffusion-Low-Light算法实现低光图像增强黑暗图片变亮变清晰
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [Day 8] 區塊鏈與人工智能的聯動應用:理論、技術與實踐