zoukankan      html  css  js  c++  java
  • SpringBoot-配置文件相关(五)

    SpringBoot-配置文件

    SpringBoot官方文档

    配置相关

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

    • application.properties
      • 语法结构 : key=value
    • application.yml
      • 语法结构 :key:空格 value

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

    YAML

    YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写。

    在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)

    YAML A Markup Language :是一个标记语言

    YAML isnot Markup Language :不是一个标记语言

    标记语言

    以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml

    yaml配置:

    server:
        prot: 8080
    

    xml配置:

    <server>
        <port>8081<port>
    </server>
    

    YAML语法

    基础语法:

    k:(空格) v   
    

    以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

    注意 :属性和值的大小写都是十分敏感的。例子:

    server:
        port: 8081
        path: /hello
    

    值的写法

    字面量:普通的值 [ 数字,布尔值,字符串 ]

    k: v
    

    字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;

    “” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;

    比如 : name: "bao sq" 输出 : bao换行 sq

    '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

    比如 : name: ‘bao sq’ 输出 : bao sq

    对象、Map(键值对)

    k: 
        v1:
        v2:
    

    在下一行来写对象的属性和值得关系,注意缩进;比如:

    student:
        name: bao
        age: 3
    

    行内写法

    student: {name: bao,age: 3}
    

    数组( List、set )

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

    pets:
     - cat
     - dog
     - pig
    

    行内写法

    pets: [cat,dog,pig]
    

    修改SpringBoot的默认端口号

    配置文件中添加,端口号的参数,就可以切换端口;

    server.port=8081
    

    注入配置文件

    程序实现

    1. 如果要使用properties配置文件可能导入时存在乱码现象 , 需要在IDEA中进行调整 , 我们这里直接使用yml文件 , 将默认的 application.properties后缀修改为yml

    img

    2. 导入配置文件处理器

    <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    

    3.编写yml 配置文件

    person:
        name: bao
        age: 3
        happy: false
        birth: 2005/01/01
        maps: {k1: v1,k2: v2}
        lists:
          - code
          - girl
          - music
        dog:
          name: 旺财
          age: 1
    

    4.在SpringBoot的主程序的同级目录下建包,只有这样,主程序才会对这些类生效 ; 我们建一个pojo的包放入我们的Person类和Dog类;

    package com.bao.springbootdemo03.pojo;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    
    /*
    @ConfigurationProperties作用:
    将配置文件中配置的每一个属性的值,映射到这个组件中;
    告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
    参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
    
    只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
    */
    @Component //注册bean
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String name;
        private Integer age;
        private Boolean happy;
        private Date birth;
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    
        //get,set方法
        //toString方法
        
    }
    

    记得写上 toString()方法,方便调试输出结果

    package com.kuang.springbootdemo03.pojo;
    
    public class Dog {
        private String name;
        private Integer age;
        
        //get、set方法
        //toString()方法  
    }
    

    5.确认无误后,到测试单元中进行测试,看是否注入成功!

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootDemo03ApplicationTests {
    
        @Autowired
        Person person ;
    
        @Test
        public void contextLoads() {
            System.out.println(person);
        }
    
    }
    

    JSR303数据校验

    spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式

    @Component //注册bean
    @ConfigurationProperties(prefix = "person")
    @Validated  //数据校验
    public class Person {
    
        //@Value("${person.name}")
        @Email //name必须是邮箱格式
        private String name;
    }
    

    运行结果
    会报邮箱格式的错误

    使用数据校验,可以保证数据的正确性;

    加载指定配置文件

    1. @PropertySource :加载指定的配置文件;使用@configurationProperties默认从全局配置文件中获取值;

    我们去在resources目录下新建一个person.properties文件

    name=baobao
    

    然后在我们的代码中指定加载person.properties文件

    @PropertySource(value = "classpath:person.properties")
    @Component //注册bean
    public class Person {
    
        @Value("${name}")
        private String name;
    
        ......  
    }
    

    配置文件占位符

    随机数

    ${random.value}、${random.int}、${random.long}、${random.int(10)}等等
    

    占位符引用其他属性的值,如果不存在可以设置默认值

    person:
        name: bao${random.uuid}
        age: ${random.int}
        happy: false
        birth: 2010/02/01
        maps: {k1: v1,k2: v2}
        lists:
          - code
          - girl
          - music
        dog:
          name: ${person.hello:hello}_狗子
          age: 1 
    
    每个优秀的人,都有一段沉默的时光.那段时光,是付出很多努力,却得不到结果的日子,我们把他叫做扎根
  • 相关阅读:
    变量可变性问题
    Android 创建Listener监听器形式选择:匿名内部类?外部类?
    linux下安装zookeeper
    翻页工具类
    将哈夫曼树转化成二叉树
    Activity的启动流程分析
    题目1186:打印日期
    数据库设计--数据流图(DFD)
    c#基础之数组
    10.3.1 一个CONNECT BY的样例
  • 原文地址:https://www.cnblogs.com/sq-bmw/p/11924300.html
Copyright © 2011-2022 走看看