Spring Boot学习笔记(二)--Spring Boot配置

二、Spring Boot 配置

1.1 配置文件

SpringBoot使用一个全局的配置文件(配置文件名是固定的):

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;

YAML(YAML Ain’t Markup Language)

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

​ YAML isn’t Markup Language:不是一个标记语言;

标记语言:

​ 以前的配置文件:大多数都是 xxxx.xml 文件;

​ YAML:以数据为中心,比json、xml等更适合做配置文件;

​ YAML:配置例子

server:
  port: 8081

​ XML:

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

项目启动后,可以看到端口号修改成8081:
在这里插入图片描述

1.2 YAML语法

1、基本语法:

key:(空格)value:表示一对键值对(空格必须要有!!);

以空格的缩进来控制层级关系:只要是左对齐的一列数据,都属于一个层级;

server:
	port: 8081
	path: /hello

属性和值也是大小敏感;

2、值的写法:

字面量:普通的值(数字、字符串、布尔)

k: v:字面直接来写:

​ 字符串默认不需要加上双引号或者单引号;

​ “”:双引号:不会转义特殊字符,特殊字符会表达出它本来的意思

​ name:“zhangsan \n lisi”输出:zhangsan 换行 lisi

​ ‘’:单引号:会转义特殊字符,会把特殊字符看作一般字符串输出

​ name:“zhangsan \n lisi”输出:zhangsan \n lisi

对象,Map(属性和值)(键值对);

​ 对象还是k:v的方式。

​ 在下一行来写对象的属性和值,注意空格和缩进:

friends:
		lastName: zhangsan
		age: 18

​ 行内写法:

friends: {lastName: zhangsan,age: 18}

数组(List、Set);

用(空格)-(空格)来表示数组内的一个元素:

pets:
 - cat
 - dog
 - pig

行内写法:

pets: [cat,dog,pig]

1.3 将配置文件中的属性绑定到实体类(JavaBean)中:

1、创建JavaBean:

在这里插入图片描述
Person实体类:

package com.ckh.springboot01helloworldquick.bean;


import java.util.Date;
import java.util.List;
import java.util.Map;


public class Person {
    private String lastName;
    private int age;
    private boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

Dog实体类:

package com.ckh.springboot01helloworldquick.bean;

public class Dog {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

tips:使用ALT+Insert快捷键可以自动生成getter和setter以及toString函数。

2、编写相应的配置文件(这里为了简便,直接在全局配置文件application.yml文件中编写)

在application.yml中写person对应的属性的值:

person:
  lastName: ckh
  age: 18
  boss: true
  birth: 1998/9/14
  maps: {k1: v1,k2: v2}
  lists:
    - lisi
    - zhaoliu
  dog:
    name: xiaogou
    age: 2

3、使用注解进行配置文件与组件的绑定

Person实体类进行绑定:

@ConfigurationProperties 将该类中的所有属性与配置文件中相关的属性绑定;

@Component只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能

package com.ckh.springboot01helloworldquick.bean;

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 将该类中的所有属性与配置文件中相关的属性绑定;
* 将配置文件中的属性映射到这个文件中
* prefix = "person" 表示将配置文件中的person下的属性进行一一映射
*
* @Component只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
* */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private int age;
    private boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

注意!!当输入@ConfigurationProperties时上方会出现警告,表示没有相关处理器:
在这里插入图片描述

4、在pom文件中导入依赖:

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

5、进行单元测试,看看Person是否拿到了配置文件中的值

在test文件下有个自动创建的单元测试文件:

在这里插入图片描述

package com.ckh.springboot01helloworldquick;

import com.ckh.springboot01helloworldquick.bean.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/*
* Spring Boot 单元测试;
* 可以在测试时进行编码,很方便地进行自动注入等容器的功能;
* */
@SpringBootTest
class SpringBoot01HelloworldQuickApplicationTests {
    @Autowired
    Person person; //自动注入Person

    @Test
    void contextLoads() {
        System.out.println(person);//在控制台打印person实例
    }

}

6、运行单元测试文件,查看是否输出person的值

不要运行整个项目,只需点击左边的run:

在这里插入图片描述

运行成功截图,控制台打印person信息:
在这里插入图片描述

发布了3 篇原创文章 · 获赞 3 · 访问量 228

猜你喜欢

转载自blog.csdn.net/bulubulua/article/details/104718688