Spring Boot 教程

Application 属性文件

本章节将介绍 Spring Boot 中的 application.properties 属性文件,以及它的加载顺序。

SpringApplication 将从以下位置加载 application.properties 文件,并把它们添加到 Spring Environment 中:

(1)当前目录下的 /config 子目录中的 application.properties 文件

(2)当前目录下的 application.properties 文件

(3)classpath下的 /config 包中的 application.properties 文件

(4)classpath 根路径(root)下的 application.properties 文件

上面列表中,序号越小优先级越高。因此,上面中(1)可以覆盖(2)、(3)、(4)的配置,以此类推。有了配置文件加载的优先级,我们就可以将我们的配置进行外置化,在不同的运行环境进行动态配置。

如果不喜欢使用 application.properties 作为配置文件名,你可以通过指定 spring.config.name 环境属性来切换其他的名称,也可以使用 spring.config.location 环境属性引用一个明确的路径(目录位置或文件路径列表以逗号分割)。 例如:

java -jar myproject.jar --spring.config.name=myproject

java -jar myproject.jar --spring.config.location=classpath:/default.properties, classpath:/override.properties

在初期需要根据 spring.config.name 和 spring.config.location 决定加载哪个文件,所以它们必须定义为 environment 属性(通常为 OS env,系统属性或命令行参数)。

如果 spring.config.location 包含目录(相对于文件),那它们应该以 / 结尾(在被加载前,spring.config.name 关联的名称将被追加到后面,包括 profile-specific 的文件名)。

spring.config.location 下定义的文件使用方法跟往常一样,没有 profile-specific 变量支持的属性,将被 profile-specific 的属性覆盖。

不管 spring.config.location 配置什么值,默认总会按照 classpath:,classpath:/config,file:,file:config/ 的顺序进行搜索,优先级由低到高,也就是说 file:config/ 优先级最高。

如果你指定自己的位置,它们会优先于所有的默认位置(locations),并使用相同的由低到高的优先级顺序。那样,你就可以在 application.properties 为应用设置默认值,然后在运行的时候使用不同的文件覆盖它,同时保留默认配置。

注意:

如果使用环境变量而不是系统属性,需要注意多数操作系统的 key 名称不允许以句号分割(period-separated),但你可以使用下划线(underscores)代替(例如:使用 SPRING_CONFIG_NAME 代替 spring.config.name )。

如果应用运行在容器中,那么 JNDI 属性(java:comp/env)或 servlet 上下文初始化参数可以用来代替环境变量或系统属性,当然也可以使用环境变量或系统属性。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号