springboot2.0 配置文件application.properties,application.yml语法详解

创建一个springboot项目《spring boot2.0 第一个程序《快速开始》》

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

application.properties

application.yml

配置文件的主要作用

修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好的一些默认属性

自定义一些属性,并且注入的spring的容器中

加载级别:优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

  1. –file:./config/
  2. –file:./
  3. –classpath:/config/
  4. –classpath:/

我们还可以通过spring.config.location来改变默认的配置文件位置

加载文件顺序,可以看到,文件可以存放在项目外部,可以项目内部(classpath下),外部的优先级别要高于内部的

外部的文件的优先级别可以参考官网的文档https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-features-external-config

我们来看下yml的语法:先定义一个实体对象

public class Emp {
    private String name;

    private Integer age;

    private List<String> list;

    private Map<String, String> map;
    //免去get 和set方法
}

yml文件的语法:属性和值也是大小写敏感 ,属性与属性之间,需要换行空2格

emp: 
   #普通的类的数据 使用key: val
   name: xiaoli
   age: 18
   #集合的形式 行内写法 list: [xiaoming,xiaohong]
   list: 
    - xiaoming
    - xiaohong
   #map 或者对象的写法  行内写法 map: {test01:test01,test02:test02} 
   map: 
    test01: test01
    test02: test02 

1:字面量:普通的值(数字,字符串,布尔)

使用 字段:(空格)值

注意:字符串默认不用加上单引号或者双引号;

"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思 (例如:xiaoli \n,表示xiaoli 换行)

'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

2:对象、Map(属性和值)(键值对):

对象下,还是使用 字段:(空格)值

3:数组(List、Set):

list: 
    - xiaoming
    - xiaohong
list: [xiaoming,xiaohong]

字段:

    横杠(空格)值

4:还可以使用${}符号,引用已经配置过的属性(包括默认配置以及自定义的配置)

emp:
  name: xiaoli
  age: 18
  list:
  ##如果${emp.age}没有值,可以使用${emp.age:19}来指定默认值
  - ${emp.age}xiaoming
  - xiaohong
  map:
    test01: test01
    test02: test02

5:也可以使用系统定义的一些函数

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

最后把属性注入到这个对象中,使用 @ConfigurationProperties(prefix = "emp")注解,标注在实体类上,并@Component 加入到容器中

@Component
@ConfigurationProperties(prefix = "emp")
public class Emp {
    private String name;

    private Integer age;

    private List<String> list;

    private Map<String, String> map;
    //免去get和set方法
}

另外,在之前的《spring 注解@PropertySource 引入文件,@Value读取文件内容,EmbeddedValueResolverAware读取文件内容》中,也可以使用@Value注解,来注入属性的值,当然,两者之间还是有区别的

    @Value获取值和@ConfigurationProperties获取值比较

  @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持(userName或者user-name) 不支持
SpEL 不支持 支持
JSR303数据校验 支持(@Validated注解的支持) 不支持
复杂类型封装 支持(支持各种嵌套类型,复杂类型) 不支持

上述的yml用法,在application.properties中的用法如下:

emp.age=18
emp.list=xiaohong,xiaolan
emp.map.k1=k1
emp.map.k2=k2
##集合的另一种写法,yml文件,也是支持的
emp.list[0] = xioali
emp.list[1] = xioali

更加的详细的,就不介绍了,大家在实际应用中,再发现和探究吧

原创文章 83 获赞 155 访问量 36万+

猜你喜欢

转载自blog.csdn.net/qq_28410283/article/details/91354635