配置文件
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