配置文件

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties
语法结构 :key=value
application.yml
语法结构 :key:空格 value

配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

yarm基础语法

yaml语言以数据作为中心,而不是以标记语言为重点!

传统xml配置:

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

yaml配置:

server:
  prot: 8080

yaml语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。

①字面量:普通的值 [数字,布尔值,字符串]
字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
k: v
注意:

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
    比如 :name: "hello \n world" 输出 :hello 换行 world
  • '' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
    比如 :name: ‘hello \n world’ 输出 :hello \n world
    ②对象、Map(键值对)

对象、Map格式

k: 
    v1:
    v2:

在下一行来写对象的属性和值得关系,注意缩进;比如:

student:
    name: zhangsan
    age: 13

行内写法

student: {name: zhangsan,age: 13}

③数组( List、set )
用 - 值表示数组中的一个元素,比如:

pets:
 - cat
 - dog
 - pig

行内写法

pets: [cat,dog,pig]

修改SpringBoot的默认端口号
配置文件中添加,端口号的参数,就可以切换端口;

server:
  port: 8082

注入yaml配置文件
1、在springboot项目中的resources目录下新建一个文件 application.yml

hello:
  name: zhangsan
  age: 13

2、编写一个实体类 HelloEntity;

package com.example.springstudy.entity;
import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
//注册bean
@Component
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “hello” : 将配置文件中的hello下面的所有属性一一对应
如果没有@Component注解,@ConfigurationProperties会出现红色波浪线
*/
@ConfigurationProperties(prefix = "hello")
public class HelloEntity {
    private String name;
    private Integer age;
}

@ConfigurationProperties需要用到下面的依赖(导入配置文件处理器)

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

配置完成后,去测试类中测试一下:

package com.example.springstudy.controller;

import com.example.springstudy.entity.HelloEntity;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class HelloControllerTest {
    @Autowired
    HelloEntity helloEntity;
    @Test
    public void contextLoads() {
        System.out.println(helloEntity);
    }
}

结果如下:

我在启动测试方法contextLoads时,提示: Failed to resolve org.junit.vintage:junit-vintage-engine:5.7.1
原因是IntelliJ IDEA版本和junit版本不适配(最新idea默认用junit5)
在项目的pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <scope>test</scope>
</dependency>

如果pom中存在下面的引用,把其中这段依赖中注释的部分删除掉

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <!--需要删除
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
    -->
</dependency>

配置文件占位符
配置文件还可以编写占位符生成随机数

person:
    name: qinjiang${random.uuid} # 随机uuid
    age: ${random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${person.hello:other}_旺财
      age: 1
posted on 2021-03-30 08:27  飞飞乐园  阅读(214)  评论(0编辑  收藏  举报