码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • yaml语法


    目录

    一、配置文件

    application.properties

    application.yml

    🐟配置文件的作用

    二、yaml

    1.基本语法

    2.数据类型

    3.Yaml 对象

    ⭐yaml与properties对比

    三、 给属性赋值的方式

    ⚪创建实体类

    💧原生方式实现对象赋值

    🔥使用yaml配置的方式进行注入    

    ​编辑⚪加上@ConfigurationProperties注解后出现的问题及解决方法

    🔥使用properties配置的方式进行注入     

    四、@Value 与@ConfigurationProperties的对比


    一、配置文件

    SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

    • application.properties

      • 语法结构 :key=value

      • (修改默认端口号)

    • application.yml

      • 语法结构 :key:空格 value

      •  

    🐟配置文件的作用

    修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

    二、yaml

    YAML_百度百科 (baidu.com)

    YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

    1.基本语法

    1. 大小写敏感
    2. 使用缩进表示层级关系
    3. 缩进不允许使用tab,只允许空格
    4. 缩进的空格数不重要,只要相同层级的元素左对齐即可

    2.数据类型

    YAML 支持以下几种数据类型:

    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值(字符串、布尔值、整数、浮点数、Null、时间、日期)

    3.Yaml 对象

    • 对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
    • 也可以使用 key:{key1: value1, key2: value2, ...}。
    • 还可以使用缩进表示层级关系;
    • 较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value: 意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

    ⭐yaml与properties对比

    三、 给属性赋值的方式

    ⚪创建实体类

    Dog类:

    1. package com.zz.springboot02config.pojo;
    2. import org.springframework.stereotype.Component;
    3. @Component
    4. public class Dog {
    5. private String name;
    6. private Integer age;
    7. public Dog() {
    8. }
    9. public Dog(String name, Integer age) {
    10. this.name = name;
    11. this.age = age;
    12. }
    13. public String getName() {
    14. return name;
    15. }
    16. public void setName(String name) {
    17. this.name = name;
    18. }
    19. public Integer getAge() {
    20. return age;
    21. }
    22. public void setAge(Integer age) {
    23. this.age = age;
    24. }
    25. @Override
    26. public String toString() {
    27. return "Dog{" +
    28. "name='" + name + '\'' +
    29. ", age=" + age +
    30. '}';
    31. }
    32. }

    Person类: 

    1. package com.zz.springboot02config.pojo;
    2. import java.util.Date;
    3. import java.util.List;
    4. import java.util.Map;
    5. @Component
    6. public class Person{
    7. private String name;
    8. private Integer age;
    9. private Boolean happy;
    10. private Date birth;
    11. private Map maps;
    12. private List lists;
    13. private Dog dog;
    14. public Person() {
    15. }
    16. public Person(String name, Integer age, Boolean happy, Date birth, Map maps, List lists, Dog dog) {
    17. this.name = name;
    18. this.age = age;
    19. this.happy = happy;
    20. this.birth = birth;
    21. this.maps = maps;
    22. this.lists = lists;
    23. this.dog = dog;
    24. }
    25. public String getName() {
    26. return name;
    27. }
    28. public void setName(String name) {
    29. this.name = name;
    30. }
    31. public Integer getAge() {
    32. return age;
    33. }
    34. public void setAge(Integer age) {
    35. this.age = age;
    36. }
    37. public Boolean getHappy() {
    38. return happy;
    39. }
    40. public void setHappy(Boolean happy) {
    41. this.happy = happy;
    42. }
    43. public Date getBirth() {
    44. return birth;
    45. }
    46. public void setBirth(Date birth) {
    47. this.birth = birth;
    48. }
    49. public Map getMaps() {
    50. return maps;
    51. }
    52. public void setMaps(Map maps) {
    53. this.maps = maps;
    54. }
    55. public List getLists() {
    56. return lists;
    57. }
    58. public void setLists(List lists) {
    59. this.lists = lists;
    60. }
    61. public Dog getDog() {
    62. return dog;
    63. }
    64. public void setDog(Dog dog) {
    65. this.dog = dog;
    66. }
    67. @Override
    68. public String toString() {
    69. return "Person{" +
    70. "name='" + name + '\'' +
    71. ", age=" + age +
    72. ", happy=" + happy +
    73. ", birth=" + birth +
    74. ", maps=" + maps +
    75. ", lists=" + lists +
    76. ", dog=" + dog +
    77. '}';
    78. }
    79. }
    80. 💧原生方式实现对象赋值

      运行测试代码: 

      🔥使用yaml配置的方式进行注入    

      测试方法: 

      1. @SpringBootTest
      2. class Springboot02ConfigApplicationTests {
      3. @Autowired
      4. //@Qualifier 指定具体某一个
      5. private Person person;
      6. @Test
      7. void contextLoads() {
      8. System.out.println(person);
      9. }
      10. }

      在实体类上加上 @ConfigurationProperties注解

      1. /*
      2. @ConfigurationProperties作用:
      3. 将配置文件中配置的每一个属性的值,映射到这个组件中;
      4. 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
      5. 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
      6. */
      7. @Component //注册bean
      8. @ConfigurationProperties(prefix = "person")
      9. public class Person {
      10. private String name;
      11. private Integer age;
      12. private Boolean happy;
      13. private Date birth;
      14. private Map maps;
      15. private List lists;
      16. private Dog dog;
      17. }
      18. 运行结果

        ⚪加上@ConfigurationProperties注解后出现的问题及解决方法

        在pom.xml中添加依赖 

        1. <dependency>
        2. <groupId>org.springframework.bootgroupId>
        3. <artifactId>spring-boot-configuration-processorartifactId>
        4. <optional>trueoptional>
        5. dependency>

        🔥使用properties配置的方式进行注入     

        在实体类上添加注解,加载指定的配置文件

        1. //加载指定的配置文件
        2. @PropertySource(value = "classpath:application.properties")
        3. public class Person{
        4. //SPEL表达式取出配置文件的值
        5. @Value("${name}")
        6. private String name;
        7. private Integer age;
        8. private Boolean happy;
        9. private Date birth;
        10. private Map maps;
        11. private List lists;
        12. private Dog dog;
          1. @SpringBootTest
          2. class Springboot02ConfigApplicationTests {
          3. @Autowired
          4. //@Qualifier 指定具体某一个
          5. private Person person;
          6. @Test
          7. void contextLoads() {
          8. System.out.println(person);
          9. }
          10. }

          运行结果: 

           

           

          四、@Value 与@ConfigurationProperties的对比

          @ConfigurationProperties@Value
          功能批量注入配置文件中的属性依次指定
          松散绑定(松散语法)支持支持
          SpEL不支持支持
          JSR303数据校验支持不支持
          复杂类型封装支持不支持

          1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

          2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。

          3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

          4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

        13. 相关阅读:
          10.12作业
          【Java 进阶篇】使用 SQL 进行排序查询
          Java中的static关键字
          什么是XXE攻击?如何进行防护
          【NVMe2.0b 14-5】Firmware Download/Commit command
          【Java|golang】337. 打家劫舍 III---树上最大独立集
          SpringBoot防Xss攻击
          JavaWeb-05 jQuery
          为什么C4D能成为电商设计的王者?
          论文阅读笔记(四)——实例分割与掩模R-CNN应用于多摄像机设置中松散的奶牛
        14. 原文地址:https://blog.csdn.net/m0_52982868/article/details/126471929
          • 最新文章
          • 攻防演习之三天拿下官网站群
            数据安全治理学习——前期安全规划和安全管理体系建设
            企业安全 | 企业内一次钓鱼演练准备过程
            内网渗透测试 | Kerberos协议及其部分攻击手法
            0day的产生 | 不懂代码的"代码审计"
            安装scrcpy-client模块av模块异常,环境问题解决方案
            leetcode hot100【LeetCode 279. 完全平方数】java实现
            OpenWrt下安装Mosquitto
            AnatoMask论文汇总
            【AI日记】24.11.01 LangChain、openai api和github copilot
          • 热门文章
          • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
            奉劝各位学弟学妹们,该打造你的技术影响力了!
            五年了,我在 CSDN 的两个一百万。
            Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
            面试官都震惊,你这网络基础可以啊!
            你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
            心情不好的时候,用 Python 画棵樱花树送给自己吧
            通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
            13 万字 C 语言从入门到精通保姆级教程2021 年版
            10行代码集2000张美女图,Python爬虫120例,再上征途
          Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
          正则表达式工具 cron表达式工具 密码生成工具

          京公网安备 11010502049817号