zoukankan      html  css  js  c++  java
  • SpringBoot配置文件分析

    文件类型

    分析源码能够知道

    配置文件类型有yml、yaml、properties三种类型

    YAML

    SpringBoot推荐使用yaml文件,但是三者都可以;

    yaml是强调以数据做为中心

    经历过的配置:

    xml:标记语言,格式繁琐,麻烦!

    <service>
        <port>8081</port>
    </service>
    

    propeties:kry=value,太过单一,功能有限;

    service.port=8081
    

    yaml:以数据作为中心的配置文件;可以配置:普通的键值对,对象、map、数组、LIst

    service:
        port: 8081
    

    基本格式

    空格严格要求,缩进严格要求!

    基本语法

    普通字段:

    k: v
    name: zhangsan
    

    对象,Map

    k:
        v1:
        v2:
    
    person:
        name: lisi
        age: 3
    
    # 支持行内写法
    person: {name: lisi,age: 3}
    

    数组,List

    k:
        - v1
        - v2
        - v3
      
    pets:
        - cat
        - dog
        - pig
    
    # 支持行内写法
    pets: {cat,dog,pig}
    

    yaml测试实例

    编写实体类

    package com.star.pojo;
    
    import lombok.Data;
    import org.springframework.stereotype.Component;
    
    @Data
    @Component
    public class Dog {
        private String name;
        private Integer age;
    }
    
    package com.star.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    /*
    * SpringBoot配置类底层全部都是@ConfigurationPropeties
    * 可以通过prefix前缀绑定配置文件中的yaml对象
    * 这个类的所有属性,和配置类中的字段进行自动的一一对应
    *
    * */
    @Data
    @Component
    @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;
    }
    

    配置文件

    person:
      name: zhangsan
      age: 1
      happy: false
      birth: 2020/02/28
      maps: {k1: v1,k2: v2}
      lists:
        - code
        - music
        - game
      dog:
        name: 旺财
        age: 3
    

    测试类

    package com.star;
    
    import com.star.pojo.Person;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class SpringbootApplicationTests {
    
        // 自动导入数据源
        @Autowired
        private Person person;
    
        @Test
        void contextLoads() {
            System.out.println(person);
        }
    
    }
    

    测试结果;

    JSR303校验

    JSR303是Java为Bean数据合法性校验所提供的一个标准规范,叫做 Bean Validation。用于对 Java Bean中的字段值进行验证。

    Spring Boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理;

    比如我们用邮箱来测试一下

    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated//数据校验
    public class Person {
        @Email(message = "不符合邮箱格式!")//邮箱格式,message:报错信息
        private String email;
    }
    

    配置文件

    person:
        email: 123456
    

    测试类

        // 自动导入数据源
        @Autowired
        private Person person;
    
        @Test
        void contextLoads() {
            System.out.println(person);
        }
    

    测试结果:

    JSR303校验数据的格式有很多,这里只是举一个简单的例子!

    可以参考源码:

    也可以参考下图:

    分析配置文件

    我们可以在yml文件中编写这样的代码来配置服务器的端口号

    server:
      port: 8081
    

    启动项目来测试一下

    为什么写这样的代码会生效呢?

    接下来我们分析一下

    点进自动配置类的随便一个配置类(比如HttpEncodingAutoConfiguration)

    看到前缀为spring.http

    我们在yml中就可以编写

    spring:
      http:
    

    在源码中都能找到对应的属性(比如:httpProperties类中的属性:encoding.cahrset....)

    得出结论:

    • 配置文件中能配置的所有配置,都有对应的配置类
    • 所有的AutoConfig自动配置类,都有对应的XXXProperties类
    • 所有的XXXProperties配置类 都绑定了配置文件的固定的前缀

    总之:能够配置的一切的一切都是从源码中编写;

    多环境配置文件以及配置文件位置

    SpringBoot中的配置文件application.yaml可以放在多个位置:(参考官网)

    file:项目路径

    classpath:resources

    • file:./config

    • file:./

    • classpath:./

    • classpath:/

    默认配置文件的优先级:从上往下

    优先级最低的,别的配置文件可以覆盖!

    有多个配置环境,选定某一个配置文件;

    默认是选择application.yaml

    但是在application.yaml中可以选则特定的配置文件:

    选择application-dev.yaml文件

    spring:
      profiles:
        active: dev
    

    选择application-test.yaml文件

    spring:
      profiles:
        active: test
    

    也可以在一个文件中有多个配置,选择某一个配置

    # 默认
    server:
      port: 8081
    spring:
      profiles:
        active: dev/test
    ---
    server:
      port: 8082
    spring:
      profiles: dev
    ---
    server:
      port: 8083
    spring:
      profiles: test
    

    分割线相当于多个配置文件

  • 相关阅读:
    java内存泄漏的几种情况
    关于ajax请求,在参数中添加时间戳的必要性
    Linux启动界面切换:图形界面-字符界面(转)
    setTimeout 和 setInterval 的区别
    【域渗透】利用S4U2self提权
    【大数据之Hadoop篇】【1】hadoop集成环境搭建
    《windows核心编程》笔记(API)
    判断是64位操作系统还是32位系统
    centos7中搭建mysql5.7数据库
    Metasploit学习笔记(一) Samba服务 usermap_script安全漏洞相关信息
  • 原文地址:https://www.cnblogs.com/lmx-181028/p/12411104.html
Copyright © 2011-2022 走看看