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


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

    • application.properties(官方不推荐)

            语法结构 : key=value

    • application.yml

            语法结构 :key:空格 value

    1. server:
    2. port: 8081

    配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了 

    奇怪的yaml

    xml和yaml的区别 

    xml 

    1. 8081

    yaml

    1. server:
    2. port: 8081

    yaml的基础语法 

    说明:语法要求严格!

    1. 空格不能省略
    2. 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
    3. 属性和值的大小写都是十分敏感的。 

    对象、Map(键值对) 

    1. #对象、Map格式
    2. k:
    3. v1:
    4. v2:
    1. student:
    2. name: qinjiang
    3. age: 3

     行内写法

     student: {name: qinjiang,age: 3}
    

    数组( List、set )

    用 - 值表示数组中的一个元素,比如:

    1. pets:
    2. - cat
    3. - dog
    4. - pig

    行内写法

    pets: [cat,dog,pig]

    注入配置文件 

    yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值!

    易错点: 

    必须在主启动类的同级目录下建包(如:pojo),因为idea只会扫描他的同级目录! 

    dog类 

    1. package com.kuang.springboot01.pojo;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Component;
    4. @Component //@Component注解作用于类,可以把类自动装配到Spring容器中
    5. public class Dog {
    6. @Value("旺财")
    7. private String name;
    8. @Value("3")
    9. private Integer age;
    10. public Dog() {
    11. }
    12. public Dog(String name, Integer age) {
    13. this.name = name;
    14. this.age = age;
    15. }
    16. public String getName() {
    17. return name;
    18. }
    19. public void setName(String name) {
    20. this.name = name;
    21. }
    22. public Integer getAge() {
    23. return age;
    24. }
    25. public void setAge(Integer age) {
    26. this.age = age;
    27. }
    28. @Override
    29. public String toString() {
    30. return "Dog{" +
    31. "name='" + name + '\'' +
    32. ", age=" + age +
    33. '}';
    34. }
    35. }

    上面是旧的赋值方式!  

    新方法 

    注意:一个@Autowired下面只能对应一个注入属性

    如果注入多个属性,要写多个@Autowired!

    在编写 application.properties/yaml 配置文件时,由于要配置的 Person 对象属性是我们自定义的,SprimgBoot无法自动识别,所以不会有任何书写提示!在实际开发中,为了出现代码提示的效果来方便配直。在使用@ConfigurationProperties 注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot 提供的配置处理器依赖,示例代码如下。 

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

    在pom.xml中添加上述配置依赖后,还需要重新运行项目启动类或者使用“Ctit+F9”组合键(即 Buildoject)重构当前Spring Boot项目方可生效!!!

    1. package com.kuang.springboot01.pojo;
    2. import org.springframework.boot.context.properties.ConfigurationProperties;
    3. import org.springframework.stereotype.Component;
    4. import java.util.Date;
    5. import java.util.List;
    6. import java.util.Map;
    7. import java.util.Objects;
    8. @Component
    9. @ConfigurationProperties(prefix = "person")
    10. public class Person {
    11. private String name;
    12. private Integer age;
    13. private Boolean happy;
    14. private Date birth;
    15. private Map maps;
    16. private List lists;
    17. private Dog dog;
    18. public Person() {
    19. }
    20. public Person(String name, Integer age, Boolean happy, Date birth, Map maps, List lists, Dog dog) {
    21. this.name = name;
    22. this.age = age;
    23. this.happy = happy;
    24. this.birth = birth;
    25. this.maps = maps;
    26. this.lists = lists;
    27. this.dog = dog;
    28. }
    29. public String getName() {
    30. return name;
    31. }
    32. public void setName(String name) {
    33. this.name = name;
    34. }
    35. public Integer getAge() {
    36. return age;
    37. }
    38. public void setAge(Integer age) {
    39. this.age = age;
    40. }
    41. public Boolean getHappy() {
    42. return happy;
    43. }
    44. public void setHappy(Boolean happy) {
    45. this.happy = happy;
    46. }
    47. public Date getBirth() {
    48. return birth;
    49. }
    50. public void setBirth(Date birth) {
    51. this.birth = birth;
    52. }
    53. public Map getMaps() {
    54. return maps;
    55. }
    56. public void setMaps(Map maps) {
    57. this.maps = maps;
    58. }
    59. public List getLists() {
    60. return lists;
    61. }
    62. public void setLists(List lists) {
    63. this.lists = lists;
    64. }
    65. public Dog getDog() {
    66. return dog;
    67. }
    68. public void setDog(Dog dog) {
    69. this.dog = dog;
    70. }
    71. @Override
    72. public String toString() {
    73. return "Person{" +
    74. "name='" + name + '\'' +
    75. ", age=" + age +
    76. ", happy=" + happy +
    77. ", birth=" + birth +
    78. ", maps=" + maps +
    79. ", lists=" + lists +
    80. ", dog=" + dog +
    81. '}';
    82. }
    83. }
      1. Person:
      2. name: hjm
      3. age: 18
      4. happy: true
      5. birth: 2023/10/18
      6. lists:
      7. - code
      8. - music
      9. - girl
      10. dog:
      11. name: 旺财
      12. age: 3
      13. maps:
      14. k1: v1
      15. k2: v2
      1. package com.kuang.springboot01;
      2. import com.kuang.springboot01.pojo.Dog;
      3. import com.kuang.springboot01.pojo.Person;
      4. import org.junit.jupiter.api.Test;
      5. import org.springframework.beans.factory.annotation.Autowired;
      6. import org.springframework.boot.test.context.SpringBootTest;
      7. @SpringBootTest
      8. class SpringBoot01ApplicationTests {
      9. @Autowired
      10. private Person person;
      11. @Autowired
      12. private Dog dog;
      13. @Test
      14. void contextLoads() {
      15. System.out.println(person);
      16. System.out.println(dog);
      17. }
      18. }

      运行结果

      1. Person{name='hjm', age=18, happy=true, birth=Wed Oct 18 00:00:00 CST 2023, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog{name='旺财', age=3}}
      2. Dog{name='旺财', age=3}

      所以我非常推荐使用yaml来进行配置!!!

      注意点:

      • @configurationProperties:默认从全局配置文件(yaml)中获取值
      • @PropertySource :加载指定的配置文件

      对比总结

      @configurationProperties:@Value
      功能批量注入配置文件中的属性一个个指定
      松散绑定( 松散语法 )支持不支持
      SpEL不支持支持
      JSR303数据校验支持不支持
      复杂类型封装支持不支持
      1.  @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
      2. 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
      3. JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
      4. 复杂类型封装,yml中可以封装对象 , 使用value就不支持

    84. 相关阅读:
      亿图导出word和PDF中清晰度保留方法
      Spark SQL 实现分层抽样和分层随机抽样
      国产智多晶FPGA基于Verilog的设计开发流程
      JVM之Class文件分析详解
      SpringCloud -Ribbon
      基于NodeJs+Express+Mysql学生社团活动管理系统
      SQL Server2000mdf升级SQL Server2005数据库还原
      npm 内网下载 node-sass 出现的问题和解决
      护眼灯显色指数应达多少?适合学生的护眼台灯推荐
      【苹果家庭推送iMessage】软件安装应用程序访问HealthKit HomeKit
    85. 原文地址:https://blog.csdn.net/m0_62407354/article/details/133894722
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | 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号