自学SpringBoot二之配置文件--yml格式配置

时间:2024-03-18 12:27:31

springboot默认会使用两种格式的配置文件作为全局配置文件:

  1. aplication.properties
  2. aplication.yml

一、全局配置文件的作用:

修改springboot自动配置的默认值,例如修改端口号等。

二、配置文件存放的路径:

src/main/resources/目录下或者类路径/config目录下。

三、什么yml格式文件?

yml格式全程为:YAML(YAML Ain't Markup Language),翻译过来就是YAML既是一种标记语言,又不是一种标记语言

YAML是一种以数据为中心的语言,比json,xml更适合做配置文件。

四、yml的基本语法

key:(空格) value 来表示一个键值对的,但是冒号之后的空格一定不能少

以空格的缩进来表示层级关系,即只要是左对齐的列都是属于同一层级的;

eg:

server:
    port: 8080
    path: /hello

此时的port和path是属于同一层级的,都是属于server下的。

注:属性和属性值都是对大小写敏感的,且每句话的结尾没有分号,不需要任何符号;并且是在英文输入法的状态下。

五、值得写法:

1.字面量:数字,字符串,布尔值等:

      key: (空格) value 如上述例子,但是需要注意的是——字符串类型是默认不用加上双引号或者单引号的,在yml格式中,双引号和单引号都有各自不同的含义。

" "(双引号):在双引号里面的字符串若含有特殊字符是会被转义的。如:”/n“是会进行换行的。

'  '(单引号):在单引号里面的字符是不会将含有特殊字符进行转义的。如:'/n'是不会进行换行的,打印出来仍是/n。

2.对象、Map(属性-值这样键值对形式得):

直接在下一行些该对象属性和值的关系,例如:

第一种写法:

 

student:
    name: zhangsan
    age: 22

第二种写法,也称为行内写法:

student: {name: zhangsan,age: 22}

但是均需要注意空格和缩行。

3.数组(List,Set):

用- 值表示数组中的一个元素;例如:

第一种方法(需注意空格和缩进):

colors:
    - red
    - black
    - yellow
    - green

第二种方法,即行内方式:

colors: [red,black,yellow,green]

六、简单的项目示例

1.创建一个简单的springboot maven项目

pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.yangli</groupId>
   <artifactId>springbootstudy04</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>springbootstudy04</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

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

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>


</project>

Java实体类Person:

package com.yangli.springbootstudy04.doman;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

/**
 * Created with IntelliJ IDEA.
 * Description: @ConfigurationProperties(prefix = "person")表示这个类可以在配置文件中获取值,
 *                  prefix = "person"表示:获取值得key是person
 *              @Component表示需要将这个类注入到springboot容器中进行管理
 * User: yangli
 * Date: 2018-10-14
 * Time: 14:54
 */
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
    private String personName;
    private Integer age;
    private Boolean student;//是否是学生
    private Map<String,Object> map;
    private List<Object> list;
    private Pet pet;

    public String getPersonName() {
        return personName;
    }

    public void setPersonName(String personName) {
        this.personName = personName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Boolean getStudent() {
        return student;
    }

    public void setStudent(Boolean student) {
        this.student = student;
    }

    public Map<String, Object> getMap() {
        return map;
    }

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

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    @Override
    public String toString() {
        return "Person{" +
                "personName='" + personName + '\'' +
                ", age=" + age +
                ", student=" + student +
                ", map=" + map +
                ", list=" + list +
                ", pet=" + pet +
                '}';
    }
}

Java实体类Pet:

package com.yangli.springbootstudy04.doman;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: yangli
 * Date: 2018-10-14
 * Time: 14:56
 */
public class Pet {
    private String petName;
    private String brand;

    public String getPetName() {
        return petName;
    }

    public void setPetName(String petName) {
        this.petName = petName;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    @Override
    public String toString() {
        return "Pet{" +
                "petName='" + petName + '\'' +
                ", brand='" + brand + '\'' +
                '}';
    }
}

yml配置文件:

server:
  port: 8081

person:
  personName: 亚历山大
  age: 25
  student: true
  map: {wife: 伊丽莎白,add: 埃及}
  list:
    - red
    - blue
    - haha
  pet:
    petName: SB
    brand: 二哈

测试类:

package com.yangli.springbootstudy04;

import com.yangli.springbootstudy04.doman.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springbootstudy04ApplicationTests {
	@Autowired
	private Person person;

	@Test
	public void contextLoads() {
		System.err.println(person);
	}

}

控制台打印的结果:

自学SpringBoot二之配置文件--yml格式配置

注:布尔类型的变量名最好不要使用is开头,否则难以识明,在yml文件中写值得时候,其底部是会有提示的-- >

自学SpringBoot二之配置文件--yml格式配置