springboot02-YML的用法

二、配置文件

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}

数组(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)]

运行结果:

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章