一、使用yaml文件作为配置文件
这里以配置端口号为例
server:
port: 8081
1.基本语法
k:(空格)v:表示一对键值对(空格必须有)
以空格的缩进来表示控制层级关系,只要是左对齐的一列数据都是同一个层级
以设置端口号来说,如果server:或者port:后没有空格,则设置端口号就不起作用,应用程序还是采用原来的端口号8080
属性和值大小写敏感
2.各种类型对的值的语法
字面量:普通的值。直接写即可,字符串默认不用加单引号或双引号
如果里面包含了引号,则
"":双引号,不会转义特殊字符,如输入name:"zhangsan\nlisi",则输出为zhangsan换行lisi
'':单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据。如输入name:"zhangsan\nlisi",则输出为zhangsan\nlisi
对象(属性和值)、Map(键值对):
k: v:对象还是k:v的方式,在下一行写对象的属性和值得关系,注意缩进和空格
friends:
lastName: zhangsan
age: 20
也可以这样写:
friends: {lastName: zhangsan,age: 20}
数组(List、Set):
数组:用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
3.配置文件值注入
配置文件如下:
person:
lastName: zhangsan
age: 19
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2
要注意Person要顶格写
javaBean的内容如下:
/**
* 将配置文件中配置的每一个属性的值,映射到组件中
* @ConfigurationProperties:告诉spring boot将本类中的属性和配置文件中相关的配置进行绑定
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能使用容器提供的功能
*/
@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;
注意:当yaml文件中有多个一级配置时,需要标明前缀,如本例中标示的
@ConfigurationProperties(prefix = "person")
在pom.xml中导入配置文件处理器,以后编写配置就有提示了:
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
正常情况下,会输出我们自己设置的值。
二、使用properties配置文件
与yml不同的仅仅是配置文件不同,其他相同, properties配置文件的内容如下:
#配置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=guang
person.dog.age=26
此时如果输出,会有中文乱码存在,所以需要修改编码方式。idea使用的默认编码方式utf-8,而properties文件使用的是ASCII码
先解决乱码问题:
此时就可以正常输出汉字了。
完整代码见