Spring Boot小记(1)

初识YMAL

作者 Wavy Peng 日期 2018-05-04
Spring Boot小记(1)

配置文件

Spring Boot使用一个全局的配置文件:

  • application.properties
  • application.yml

配置文件名固定,作用是修改Spring Boot自动配置的默认值。

配置文件放在src/main/resources目录或者类路径/config

YAML(YAML Ain’t Markup Language)

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

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

标记语言:

​ 以前的配置文件,大多都使用的是XXX.xml文件

.yml是YAML语言的文件,以数据为中心,比json、xml等更适合做配置文件。相关语法可参考http://www.yaml.org/

YAML配置示例:

server:
port: 8081

XML配置示例:

<!-- 大量数据都浪费在了标签的开闭上 -->
<server>
<port>8081</port>
</server>

YAML语法

YAML基本语法

  • 使用缩进表示层级关系

  • 缩进时不允许使用Tab键,只允许使用空格

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  • (k: v)表示一对键值对(注意k、v之间空格必须有)

  • 大小写敏感

    server:
    port: 8081
    path: /hello

YAML支持的三种数据结构

  • 对象:键值对的集合(属性和值)

    对象还是k: v的方式,举例如下:

    friends: 
    lastName: Zhang
    age: 20

    行内写法:

    friends: {lastName: Zhang,age: 20}

  • 数组:一组按次序排列的值(List、Set)

    用(- 值)表示数组中的一个元素

    pets:
    - cat
    - dog
    - pig

    行内写法:

    pets: [cat,dog,pig]

  • 字面量:单个的、不可再分的值(数字、字符串、布尔)

    k: v 字面直接来写,字符串默认不用加上单引号或者双引号

    [注]此处单引号和双引号使用有区别:

    双引号(“”):不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思。举例如下:

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

    单引号(‘’):会转义特殊字符,特殊字符最终只是一个普通的字符串数据。举例如下:

    name: ‘zhangsan \n lisi’ => 输出:zhangsan \n lisi

配置文件值注入

配置文件

application.yml中进行相关配置

person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/10/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: puppy
age: 12
JavaBean
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:告诉Spring Boot将本类中的所有属性和配置文件中相关的配置进行绑定
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;

private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;

public String getLastName() {
return lastName;
}

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

public Integer getAge() {
return age;
}

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

public Boolean getBoss() {
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;
}

@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
配置文件处理器

在pom.xml中导入配置文件处理器,以后编写配置时就会有提示了

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

application.properties中的写法

#Idea中的properties配置文件utf-8
#配置person
person.last-name=张三
person.age=18
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=1

【注】解决.properties文件编码问题:File — Settings — File Encodings — Default encoding for properties files — 设置成UTF-8

配置图片