首页 > 编程语言 > 详细

SpringBoot配置文件分析

时间:2020-03-11 21:32:35      阅读:83      评论:0      收藏:0      [点我收藏+]

文件类型

分析源码能够知道

配置文件类型有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}

编写实体类

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);
    }

}

测试结果;

技术分享图片

我们也可以配置服务器的端口号

server:
  port: 8081

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

接下来我们进行分析一下

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

技术分享图片

技术分享图片

技术分享图片

看到前缀为spring.http

我们在yml中就可以编写

spring:
  http:

技术分享图片

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

技术分享图片

得出结论:

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

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

SpringBoot配置文件分析

原文:https://www.cnblogs.com/lmx-181028/p/12411104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!