从其他框架来看 我们都有自己的配置文件, hibernate有hbm,mybatis 有properties, 同样, Spring boot 也有全局配置文件。
Springboot使用一个全局的配置文件,而且配置文件的名字是固定的。 有两种
application.properties
application.yml
springboot 配置文件的作用是用来 修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好; 像我们Tomcat 启动 默认配置端口是8080 . 如果要修改, 我们就在这两个文件的一种中来修改,
YML (也叫YAML : YAM Ain't Markup Language)
YAML Ain't Markup Language 这是一个递归写法 ;
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;
标记语言:
我们以前用的配置文件,大多都使用 xxxx.xml 文件 ;
YAML : 是一种以数据为中心的配置文件, 比json,xml 等更适合做配置文件
举个栗子:
以 修改端口为例 :
yml :
server:
port:8081xml :
8081
xml 配置 将太多的浪费在了标签上面。
yml 基本语法:
k:(空格)v:表示一对键值对(空格必须有);
以 空格 的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:
port:8081path:/hello
属性和值也是大小写敏感;
值的写法:
字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
数组(List、Set):
用 - 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
配置文件注入
javaBean :
可以导入配置文件处理器依赖,以后编写配置就会有代码提示;
代码展示配置文件注入属性值 :
1 packagecom.example.webservice.bean;2
3 importorg.springframework.boot.context.properties.ConfigurationProperties;4 importorg.springframework.stereotype.Component;5
6 importjava.util.Date;7 importjava.util.List;8 importjava.util.Map;9
10 /**
11 *12 * ConfigurationProperties(prefix ="person") 将本类中的所有属性和配置文件中的相关配置进行绑定13 * prefix ="person 表示对哪个文件进行绑定14 * Component 表示这是一个容器, 只有在容器中 ConfigurationProperties 才能使用15 */
16 @Component17 @ConfigurationProperties(prefix = "person")18 public classPerson {19
20 privateString name;21 privateInteger age;22 private booleanman;23 privateDate birth;24 private Mapmap;25 private Listlist ;26 privateSon son ;27
28 .....省略get/set 以及toString 方法29
30 }31
32
33 packagecom.example.webservice.bean;34
35 public classSon {36
37 privateString name;38 privateInteger age ;39
40 publicString getName() {41 returnname;42 }43
44 publicInteger getAge() {45 returnage;46 }47
48 public voidsetName(String name) {49 this.name =name;50 }51
52 public voidsetAge(Integer age) {53 this.age =age;54 }55
56 @Override57 publicString toString() {58 return "Son{" + "name='" + name + '\'' + ", age=" + age + '}';59 }60 }61
62
63 properties文件绑定的写法64 #注释方法 Ctrl + /
65 person.name=爸爸66 person.age=45
67 person.man=true
68 person.birth=2019/8/8
69 person.map.k1=h170 person.map.k2=h271 person.list=a,1,son72 person.son.name=儿子73 person.son,age=20
74
75
76 yml 文件绑定的写法:77
78 person:79 name: 爸爸80 age: 25
81 birth: 2018/2/8
82 man: true
83 list:84 -a85 - 2
86 -son87 map: {key1:value1,key2:value2}88 son:89 name: 儿子90 age: 5
测试类 :
在我们的test 文件夹下 :
package com.example.webservice;
import com.example.webservice.bean.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 WebserviceApplicationTests {
@Autowired
Person person;
@Test
public void contextLoads() { // 直接运行这个方法 ,而不是运行整个程序
System.out.println(person);
System.out.println("********************************************************");
}
控制台打印结果 (使用的 yml 配置文件)
properties配置文件在idea中默认utf-8可能会乱码 。因为spring properties 默认是ASCII 码 ,所以需要将properties 默认编码改为UTP-8 ,再√上旁边的 将其运行时转换为ASCII码;再输入中文就好了
都改成utf-8 ,再输入中文就好了。</