springboot默认会使用两种格式的配置文件作为全局配置文件:
- aplication.properties
- 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);
}
}
控制台打印的结果:
注:布尔类型的变量名最好不要使用is开头,否则难以识明,在yml文件中写值得时候,其底部是会有提示的-- >