• SpringBoot(二)——配置文件


    SpringBoot使用一个全局的配置文件,作用是修改项目的默认值,配置文件名是固定的;application.properties/application.yml

    一、yml

    yml是以数据为中心的文件,比xml、json更适合做配置文件,不是标记语言。

    1.语法

    • 【key: value】表示键值对关系,冒号后面必须有一个空格;
    • 使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的,不允许【Tab】来缩进,只能用【空格】;
    • 区分大小写;
    • 松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射;
    • 只能单行注释#

    2.赋值

    (1)字面量:字符串默认不用加引号,加双引号特殊字符不会转义,加单引号会转义

    (2)日期:value以【/】分开,例如2020/06/21

    (3)数组:list和set中用【-】表示其中一个元素

    (4)行内写法:下一级用花括号{}围起来,每个【key: value】之间用【,】隔开

    (5)POJO类注入:

    加上@Component注解表示是Spring组件,映射

    加上@ConfigurationProperties告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定,需要在pom.xml里加上依赖包spring-boot-configuration-processor(配置文件处理器)。需要用前缀(prefix = "person")指定全局配置文件下的person下层的属性进行赋值,删掉后不能成功赋值。

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>

    对于该Person类与对应的yml配置文件

    @Component
    @ConfigurationProperties(prefix = "person")
    @Data
    public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }

    application.yml文件

    person:
        last-name: 守林鸟
        age: 22
        boss: false
        birth: 1998/11/02
        maps: {country: 中国,city: 广州}
        lists:
          - 乒乓
          - 羽毛
          - 骑行
        dog:
            name: 二哈
            age: 3
    #这是注释

    在测试类里测试输出

    import com.lyj.demo.bean.Person;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.junit.jupiter.api.Test;
    
    @SpringBootTest
    class Test01ApplicationTests {
    
        @Autowired
        Person person;
    
        @Test
        public void testHello(){
            System.out.println(person);
        }
    }

    在实际开发中,数据基本都是从web层传入,而不是在配置文件中写死,配置文件一般用于连接数据库等可以写死的信息,这里只是记录注入的语法规范。

    二、properties

    这是一种属性文件,也是以key-value的形式存值

    (1)注释#

    (2)赋值以【.】的形式,也需要在Person类上面加上@ConfigurationProperties(prefix = "person")

    #单行注释
    person.last-name=霸王别鸡
    person.age=23
    person.boss=false
    person.birth=1998/11/02
    person.maps.country=中国
    person.maps.city=广州
    person.lists[0]=乒乓
    person.lists[1]=羽毛
    person.lists[2]=打码
    person.dog.name=二哈
    person.dog.age=3 #后续要比对

    (3)idea乱码问题

    File->Settings...->Editor->File Encodings,默认编码格式改为UTF-8,勾选后面的【Transparent native-to-ascii conversion】。

    (4)与yml一起加载

    如果两个配置文件同时存在,先加载yml文件,再加载properties文件,二者都有的属性yml的会被覆盖,如果仅yml有的属性就不会被覆盖,可以理解为properties优先级更高,互补配置

    (5)properties与yml文件内容相互转换的网址

    https://www.toyaml.com/index.html

    (6)@Value获取值和@ConfigurationProperties获取值比较

    • 松散语法是指lastName可以以last-name的形式来赋值
    • 校验需要加上@Validated注解,校验格式,例如属性有@Email注解时,赋值需要是合法邮箱
    • SpEL是指赋值#{11*2}这样的表达式直接获得结果22

    (7)其他配置方法

    @PropertySource:防止全局application.properties配置文件巨大,再开一个person.properties配置文件来写东西

    @PropertySource(value = {"classpath:person.properties"})
    @Component
    @ConfigurationProperties(prefix = "person")
    @Data
    public class Person {

    即使它看起来是灰色的,但也是可以识别的

    (8)、poperties占位符

    • ${random.value}
    • ${random.uuid}
    • ${random.int(10)}
    • ${random.int([min],[max])}
    • ${random.long}

    如果前面有一个属性,例如person.last-name,写了但没有赋值(没有接上=),后面用${person.last-name}获取的时候当作空字符串

    如果属性不存在例如person.last-nameeee,以前会报错,现在是直接把整个【${person.last-name}】当作字符串拼接;不想要这样的话就加上冒号写一个默认值

    person.dog.name=${person.last-nameeee}dog
    #输出:${person.last-nameeee}dog
    person.dog.name=${person.last-nameeee:霸王别鸡的}dog
    #输出:霸王别鸡的dog

    三、Profile

    主配置文件可以写多个,适应各种不同的环境需要,默认的文件是application.properties,其他的命名为application-{profile}.properties/yml

    1.properties写法

    例如自定义application-dev.properties和application-prod.properties文件,在默认文件中加上这么一句话就可以启动其他的配置文件

    spring.profiles.active=dev

    2.yml写法

    用文档分块[---]的形式当作几个不同的文件,在最上面一个写上激活方式

    server:
      port: 8081
    spring:
      profiles:
        active: dev #激活
    person:
      last-name: 默认
    
    ---
    
    server:
      port: 8082
    spring:
      profiles: dev
    
    person:
      last-name: dev环境
    ---
    
    server:
      port: 8084
    spring:
      profiles: prod
    
    person:
      last-name: prod环境

    dev指开发环境,prod或pro指生产环境,test指测试环境,pre指预发布环境

     

  • 相关阅读:
    数据标注对于人工智能行业的发展到底有多重要?
    人工智能行业每日必读(01·15)
    数据堂与云测数据,哪个数据标注质量更高?
    龙猫数据与云测数据,哪个数据标注质量更高?
    人工智能行业每日必读(01·14)
    人工智能行业每日必读(01.13)
    AI行业精选日报_人工智能(01·10)
    Serverless Kubernetes:理想,现实与未来
    什么是云原生
    深挖云原生的真正含义
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/13174669.html
Copyright © 2020-2023  润新知