SpringBoot项目启动读取外部配置文件

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路SpringBoot项目启动读取外部配置文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

SpringBoot如何加载jar包外面的配置文件?

参考链接

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files

SpringBoot配置文件

Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件、YAML文件、环境变量、命令行参数。
用@Value注解可以将属性值直接注入到beans中。命令行参数以--开头。

以设置应用端口为例

properties文件示例(application.properties):

server.port=80

YAML文件示例(application.yml):

server:
  port: 80

Spring Framework提供了两个方便的类,可以用来加载YAML文档。YamlPropertiesFactoryBean 将 YAML 作为 Properties 加载,而 YamlMapFactoryBean 将 YAML 作为一个 Map 加载。

在properties和yml/yaml配置文件同时存在的情况下, 在同一目录下,properties配置优先级 > YAML(YML)配置优先级。

配置文件加载的顺序如下:

Application properties packaged inside your jar (application.properties and YAML variants)
Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
Application properties outside of your packaged jar (application.properties and YAML variants)
Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

翻译如下:

(1) 当前jar包内部的application.properties和application.yml
(2) 当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
(3) 引用的jar包外部的application.properties和application.yml
(4) 引用的jar包外部的application-{profile}.properties 和 application-{profile}.yml

配置文件位置查找顺序

应用程序启动的时候,Spring Boot 会自动从以下位置查找并加载 application.properties 和 application.yaml 文件:

The classpath root
The classpath /config package
The current directory
The /config subdirectory in the current directory
Immediate child directories of the /config subdirectory:/config子目录的直接子目录

翻译如下:

(1) classpath 根路径
(2) classpath 根路径下config目录
(3) jar包当前目录
(4) jar包当前目录的config目录
(5) /config子目录的直接子目录

查找顺序按优先级来,后面的可以覆盖前面的。文件中的每一项会作为PropertySources被添加到Spring Environment。

如果你不想用”application”作为配置文件名称,可以在环境属性中通过spring.config.name来指定。还可以使用spring.config.location来显式指定配置文件的位置(文件路径或目录用逗号分隔)

注意spring.config.name 和 spring.config.location 必须定义为一个环境属性(通常是一个OS环境变量、一个系统属性或一个命令行参数)

如果 spring.config.location 指定的是一个目录,那么必须以 /结尾。
无论直接指定文件还是包含在目录中,配置文件必须在其名称中包含文件扩展名。通常,扩展名支持 .properties, .yaml, .yml

举个例子:

指定单个文件

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

指定多个位置

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

默认情况下,如果指定的位置不存在,则会报错。如果你不确定它是否存在,可以使用 optional: 前缀

例如:

optional:classpath:/custom-config/,optional:file:./custom-config/

Profile Specific Files

Spring Boot 会尝试加载按照命名规约 application-{profile} 的文件,我们把这样的文件称为Profile-specific文件。

例如,如果你激活了一个名称为prod的profile,并且使用YAML文件,那么 application.yml 和 application-prod.yml 都会被尝试加载。

Profile-specific文件必须要和application.properties在相同的位置,而且profile-specific文件中的配置项会覆盖非profile-specific文件中相同的配置项。如果有多个profile-specific文件被激活,则后面会覆盖前面的。

举个例子,假设spring.profiles.active=prod,live,那么application-prod.properties中的配置项会被application-live.properties中的同名配置项覆盖。如果没有明确指定激活哪个profile,则application-default会被考虑激活。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155676.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!