当前位置:网站首页 > 技术博客 > 正文

springboot配置文件yml和properties区别



YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁,但描述数据的方式略微难于xml。
YML文件的扩展名可以使用.yml或者.yaml,虽然扩展名不同,但二者没有本质区别。

  1. 配置普通数据(单个键值)

语法: key: value

示例:键与冒号之间没有空格,而值与空格间必须有一个英文半角空格

 

  1. 配置对象数据(对象中含有多个属性和对应值)

语法1
key:
​ key1: value1
​ key2: value2

示例:key1前面的空格个数不限定,在yml语法中,相同缩进代表同一个级别,但一般默认两个空格,缩进多度也影响阅读。

 

语法2
key: {key1: value1,key2: value2}

示例:

 

  1. 配置Map数据
    语法同上,上述数据结构既可以解析为对象,也可以解析为map集合。这里不再举例。

  2. 配置数组(List、Set)数据

语法1
key:
​ - value1
​ - value2

示例:value1与之间的 - 之间存在一个空格

 

语法2
key: [value1,value2]

示例:

 

当集合中的元素为对象形式的时候:

 

@Value 注解用于配置文件中单个键值的映射。
我们写一个controller,其中随便定义几个属性来接收配置文件中的值:

 

启动工程访问 http://localhost:8080/getValue
在这里插入图片描述
访问成功,接下来看控制台:OK
在这里插入图片描述

我们使用注解 @ConfigurationProperties可以完成配置文件中对象值到Java配置对象的映射

 

下来看代码:

 

控制台输出也没有问题:
在这里插入图片描述
需要注意的是,person类这里必须提供get和set方法,否则将无法获得配置文件中的值,此注解是通过set方法向对应的属性赋值的。而我们在使用@value 注解的情况下,是不用set方法也可以的。

我们可以再来配置一下其他的类型,例如集合,数组类型,我们修改一下配置文件:

 

同时修改一下配置类,再添加一个类:

 

最后控制台输出:

name: chenfeilin
person: Person{name=‘feilin’, age=24, mylist=[chenfeilin, 777, nagasawa_masami], address=[beijing, tianjin, shanghai, chongqing], girlFriends=[Girl{girlName=‘zhangsan’, girlAge=18}, Girl{girlName=‘lisi’, girlAge=28}, Girl{girlName=‘wangwu’, girlAge=38}]}
personName: feilin

如果你有多个yml配置文件的话,在和配置类映射时,可以通过注解 @PropertySource 来将其区分,
我们先随便创建一个配置文件,将person的内容拷贝过去,然后给person类加上注解
在这里插入图片描述
具体的使用实例如下:

 

控制台输出结果不变:

person: Person{name=‘feilin’, age=24, mylist=[chenfeilin, 777, nagasawa_masami], address=[beijing, tianjin, shanghai, chongqing], girlFriends=[Girl{girlName=‘zhangsan’, girlAge=18}, Girl{girlName=‘lisi’, girlAge=28}, Girl{girlName=‘wangwu’, girlAge=38}]}

这里需要注意的一点是,注解 @PropertySource 在不指定factory属性的情况下肯定是是不会报错的,但是他将无法将我们yml配置文件中的值加载出来,这里不指定factory属性时应该是使用了默认的加载器,但其默认不支持加载yml文件,所以记得要加上这个yml文件加载工厂类。

SpringBoot的配置文件,主要的目的就是对默认的配置信息进行修改的,但是我们不可能完全记住所有配置的键值,在使用时可以去翻阅文档
这里提供了一个springboot【2.0.1.RELEASE】版本的官网配置文档:
文档URL:
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties

上边官网提供的配置信息的查询,是帮助我们将配置信息的认识从无到有的,当我们掌握和熟练使用一些配置信息后,肯定还是会不查资料,直接去写的,但是因为种种不可描述的原因,写错球咯,这时候需要一些提示功能帮我们找回记忆!

介绍这个内容的博客也有很多了,而且这个也不用写代码,没啥技术含量,就不重复造轮子了,附上一个之前看过的博客链接:
解决idea不支持SpringBoot yml文件
以及中文注释乱码问题:
spring boot application.yml文件中文注释乱码

补充
我用的idea版本可能比较新
在这里插入图片描述
里边使用到的插件可能和上边博客的不一致,这里附图

在这里插入图片描述

再补充
有时候你自己创建yml文件,或者使用其他插件创建yml文件的时候,例如JBLSpringBootAppGen插件,在你刚刚创建出文件时,会发现yml中无法提示,即使你在之前的项目中已经有了提示,此时可能也还是会没有提示,你需要将项目Rebuild之后再操作yml文件,此时提示才会生效。0.0
在这里插入图片描述

当yml文件过长或想根据业务划分的话,可以用以下配置,引入拆分出去的子配置文件

嵌套单个:

 

嵌套多个:

 

子配置文件名为application-xxx.yml,例如嵌套单个时:application-filename.yml

附上链接:
1.springboot多环境配置文件,如何包含多个yml配置文件?看这一篇就够了
2.springboot配置多个yml文件
3.关于SpringBoot的application.yml的相关配置(自定义,开发,测试,正式)切换

版权声明


相关文章:

  • 计数排序算法图解2024-12-08 22:01:00
  • malloc -12024-12-08 22:01:00
  • 服装数字码与字母码怎么对应2024-12-08 22:01:00
  • swing技巧2024-12-08 22:01:00
  • python assert怎么用2024-12-08 22:01:00
  • java匿名内部类详解2024-12-08 22:01:00
  • 代码对比工具使用2024-12-08 22:01:00
  • halcon霍夫变换2024-12-08 22:01:00
  • 在线客服系统源码2024-12-08 22:01:00
  • 怎么将class文件反编译成Java文件2024-12-08 22:01:00