二、配置文件
1.配置文件
- Spring Boot使用的配置文件是:配置文件名是固定的:
- application.properties。
- application.yml。
- 配置文件的作用是修改springboot的默认配置,比如端口号等配置。
.yml写法:
#application.yml
server:
port: 8086
.properties的写法:
#application.properties
server.port=8085
2.YML语法:
1.基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层次关机:只要左对齐的一列数据,都是同一个层次的;
2.值的写法
字面量:普通的值(数字、字符串、布尔值)
k:v 字面直接写即可;
字符串默认情况下不用加上单引号和双引号;
“” 双引号:不会转义字符串里面的特殊字符;
‘’ 单引号:会转义特殊字符;
对象、Map
k:v
对象的写法:
friend:
last:1111
name:xiaowang
id:12345
friend: {last:11111,name:xiaowang,id:12345}
扫描二维码关注公众号,回复:
10177763 查看本文章
数组(list、set)
pets:
- cat
- dog
- pig
pets: [cat,dog,pig]
3.yml文件在实际中的绑定使用(默认使用application.yml):
1.首先创建bean的类class,与yml中的值一一对应
2.给类上添加注解:
@Component
@ConfigurationProperties(value = “person”)
value是代表加载的哪一块的值。
YML文件内容如下:
server:
post: 8081
person:
lastName: zhangsan
age: 18
brith: 2000/12/12
boss: false
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
- wangsan
Dog:
name: 小狗
age: 2
4.使用自定义yml文件加载
对于自定义的yml文件,我们需要自己写一个工厂类,因为根据源码:
@PropertySource注解只给出了properties的工厂类和application.yml的工厂类,如果我们不新建一个yml工厂类,那么就无法得到yml中的配置信息。
自定义yml文件:
tm1.yml:
server:
post: 8081
person:
lastName: zhangsan
age: 18
brith: 2000/12/12
boss: false
maps: {k1: v1,k2: v2}
lists:
- lisi
- zhaoliu
- wangsan
Dog:
name: 小狗
age: 2
方法如下:
在person类前添加以下注解:
@Component
@PropertySource(value = {“classpath:tm1.yml”}, factory = YamlPropertySourceFactory.class)
@ConfigurationProperties(value = “person”)
YamlPropertySourceFactory:
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
Properties propertiesFromYaml = loadYamlIntoProperties(resource);
String sourceName = name != null ? name : resource.getResource().getFilename();
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
}
private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
try {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
} catch (IllegalStateException e) {
// for ignoreResourceNotFound
Throwable cause = e.getCause();
if (cause instanceof FileNotFoundException)
throw (FileNotFoundException) e.getCause();
throw e;
}
}
}
这样就可以得到自定义中的内容了
Controller写法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEwMdGeU-1583428325769)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\1583427714259.png)]
运行结果: