前言

  在Spring Boot中,配置文件有两种不同的格式,一个是properties,另一个是yaml。

  虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明了,而且使用的场景也更多,很多开源项目都是使用yaml进行配置(例如Hexo)。除了简洁,yaml还有另外一个特点,就是yaml中的数据是有序的,properties中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如在Spring Cloud Zuul中的配置),此时我们一般采用yaml。

  我们来看下properties的问题。

位置问题

  首先,当我们创建一个 Spring Boot 工程时,默认 resources 目录下就有一个 application.properties 文件,可以在 application.properties 文件中进行项目配置。

  但是这个文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 个地方可以存放 application.properties 文件。

1. 当前项目根目录下的config目录下;

2. 当前项目根目录下;

3. resources目录下的config目录下;

4. resources目录下。

按如上顺序,四个配置文件的优先级依次降低,优先级高的配置会覆盖优先级低的文件配置。当如下:

这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。但是,这也不是绝对的,我们也可以在项目启动时自定义配置文件位置。

例如,现在在 resources 目录下创建一个 javaboy 目录,目录中存放一个 application.properties 文件,那么正常情况下,当我们启动 Spring Boot 项目时,这个配置文件是不会被自动加载的。

我们可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。

  

此时启动项目,就会发现,项目以 classpath:/javaboy/application.propertie配置文件启动。

这是在开发工具中配置了启动位置,如果项目已经打包成 jar ,在启动命令中加入位置参数即可:

java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

文件名问题

  对于 application.properties 而言,它不一定非要叫 application ,但是项目默认是去加载名为 application 的配置文件,如果我们的配置文件不叫 application ,也是可以的,但是,需要明确指定配置文件的文件名。

  方式和指定路径一致,只不过此时的 key 是 spring.config.name 。

  首先我们在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名

  

  指定完配置文件名之后,再次启动项目,此时系统会自动去默认的四个位置下面分别查找名为 app.properties 的配置文件。当然,允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location 。

  配置文件位置和文件名称可以同时自定义。

属性注入

依赖pom

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--支持对象配置数注入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>

properties属性注入

第一种:

application.properties文件

person.name=张伟
person.sex=男
person.age=33
person.address=上海爱情公寓
person.abilitys=["爱情公寓里最有种的男人","法律咨询","倒霉体质"]
person.favorites={"girl":"大力","activity":"实习男友","orther":"法律援助,法律咨询"}

实体类

测试结果

第二种:

application.properties文件

实体类

测试结果

yml属性注入

第一种

application.yml文件

实体类

测试结果

第二种

application.yml文件

实体类

测试结果

总结

配置文件是 Spring Boot 中配置的一个重要载体,很多组件的属性都可以在这里定制。

不同于properties文件的无序,yaml配置是有序的,这一点在有些配置中是非常有用的,例如在Spring Cloud Zuul的配置中,当我们配置代理规则时,顺序就显得尤为重要了。

最新文章

  1. System.nanoTime与System.currentTimeMillis的理解与区别
  2. LeetCode: Convert Sorted List to Binary Search Tree 解题报告
  3. shell学习目录
  4. 纯CSS实现三列布局(两边固定,中间自适应)
  5. 基于nodejs 的微信 JS-SDK 简单应用
  6. 设计模式18---设计模式之策略模式(Strategy)(行为型)
  7. flask框架+pygal+sqlit3搭建图形化业务数据分析平台
  8. linux 命令随笔 ls cd pwd mkdir rm mv cp cat nl
  9. 从源码安装go 1.2.2
  10. Java并发——CAS
  11. Commons-DbUtils
  12. Mybatis学习(六)————— Spring整合mybatis
  13. h5样式布局
  14. js 取得当天0点 / 23:59:59 时间
  15. ASP.Net Core 运行错误 Http Error 502.5 解决办法
  16. 一步步教你轻松学K-means聚类算法
  17. HoloLens开发手记-凝视 Gaze
  18. Ubuntu上装KVM:安装、初次使用
  19. lintocde-247-线段树的查询 II
  20. IE浏览器右键菜单分享扩展

热门文章

  1. C++函数声明后面加throw()的作用
  2. telegraf 学习三 telegra inputs.net_response + smtp2http+ grafana 进行tcp服务状态监控
  3. urql 高度可自定义&amp;&amp;多功能的react graphql client
  4. lettcode 上的几道哈希表与链表组合的数据结构题
  5. 解决configure: WARNING: You will need re2c 0.13.4 or later
  6. linux命令之------Tar解压缩
  7. 【洛谷P5049】旅行(数据加强版)
  8. 深入理解数据库索引采用B树和B+树的原因
  9. 微信小程序全局设置分享内容
  10. Windows安装pip、wxpy