Spring Boot 加载外部配置文件
Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件、YAML文件、环境变量、命令行参数。
用@Value注解可以将属性值直接注入到beans中。命令行参数以 -- 开头
配置文件加载的顺序如下:
- 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)
应用程序启动的时候,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
查找顺序按优先级来,后面的可以覆盖前面的。文件中的每一项会作为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会被考虑激活。
YAML 文件
考虑下面的配置文件
hello:
world: "hehe" my:
roles:
- "admin"
- "guest"
转换成properties文件应该是:
hello.world=hehe
my.roles[0]=admin
my.roles[1]=guest
Spring Framework提供了两个方便的类,可以用来加载YAML文档。YamlPropertiesFactoryBean 将 YAML 作为 Properties 加载,而 YamlMapFactoryBean 将 YAML 作为一个 Map 加载。
可以用@Value注解将属性值注入到bean中
@Value("${hello.world}")
private String wahaha;
@Value("${my.roles[1]}")
private String roles1;
划重点
1、支持四种外部配置源:Java属性文件、YAML文件、环境变量、命令行参数;
2、配置文件查找位置,依次为:
(1) classpath 根路径
(2) classpath 根路径下config目录
(3) jar包当前目录
(4) jar包当前目录的config目录
(5) /config子目录的直接子目录
3、配置文件加载顺序:
(1) 当前jar包内部的application.properties和application.yml
(2) 当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
(3) 引用的外部jar包的application.properties和application.yml
(2) 引用的外部jar包的application-{profile}.properties 和 application-{profile}.yml
4、后面的可以覆盖前面的同名配置项

Spring Boot 加载外部配置文件的更多相关文章
- spring boot 加载application配置文件
这就要注意了
- Spring Boot加载配置文件
问题1:Spring如何加载配置,配置文件位置? 1.默认位置: Spring Boot默认的配置文件名称为application.properties,SpringApplication将从以下位置 ...
- Spring Boot加载application.properties配置文件顺序规则
SpringApplication会从以下路径加载所有的application.properties文件: 1.file:./config/(当前目录下的config文件夹) 2.file:./(当前 ...
- springboot加载外部配置文件
网上搜集和整理如下(自己已验证过) 1. war包在tomcat中加载外部配置文件 war包运行在独立tomcat下时,如何加载war包外部配置application.properties,以达到每次 ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- 19、属性赋值-@PropertySource加载外部配置文件
19.属性赋值-@PropertySource加载外部配置文件 加载外部配置文件的注解 19.1 [xml] 在原先的xml 中需要 导入context:property-placeholder 声明 ...
- spring boot 加载web容器tomcat流程源码分析
spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>o ...
- Spring如何加载log4j配置文件
今天有朋友在群里问了这个问题,于是写了这篇文章进行整理. 问题如下: 在项目中添加了log4j.properties配置文件,并没有在Spring配置文件中配置,也没有在web.xml中配置,但是代码 ...
- 脚本命令加载外部配置文件夹conf
加载log4j配置文件 Log4iConfigurer类 public class Log4iConfigurer { private static boolean INITIALIZED = fal ...
- spring boot加载配置文件的顺序
四个默认加载配置文件地方的优先级,四个文件相同配置有优先级概念 不同位置相互补充 外部配置文件不建议使用,不符合maven项目结构,打包会打不进去
随机推荐
- 本地打包编译jdk版本问题
一.遇到的问题 进行项目接入pinpoint-ice插件,启动项目时pinpoint-agent日志报如下不支持jdk8的错误.' 二.排查 我们是在个人笔记本电脑上windows环境下通过mav ...
- ECharts——快速入门
ECharts快速入门 引入 ECharts <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- Linux-文件压缩-tar-gzip
- Kafka的部分初始化参数的学习与整理
Kafka的部分初始化参数的学习与整理 背景 前段时间跟同事一起处理过kafka的topic offset的retention 时间与 log 的retention时间不一致. 导致消息还有, 但是o ...
- [转帖]在 TiDB 中正确使用索引,性能提升 666 倍
https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/index-666 背景 最近在给一个物流系统做TiDB POC测试,这个系统是基于 ...
- [转帖]Kafka高可用 — KRaft集群搭建
Apache Kafka Raft 是一种共识协议,它的引入是为了消除 Kafka 对 ZooKeeper 的元数据管理的依赖,被社区称之为 Kafka Raft metadata mode,简称 K ...
- [转帖]Kafka—配置SASL/PLAIN认证客户端及常用命令
https://www.jianshu.com/p/c1a02fb1779f 介绍 SASL/PLAIN 是一种简单的 username/password安全认证机制,本文主要总结服务端开启该认证 ...
- [转帖]linux内存挂载
1.主要功能 在linux中,为了提高读写速度,可以将内存挂载到目录,常见的文件格式有tmpfs和ramfs. 2.挂载步骤 $ sudo mkdir /mnt/tmp $ sudo mkdir /m ...
- [转帖]Debian9换源(阿里源)(Linux子系统)
http://www.taodudu.cc/news/show-5410026.html?action=onClick 默认你已经装好Linux子系统. Step 0: 换源核心就是把/etc/apt ...
- [转帖]Native Memory Tracking 详解(4):使用 NMT 协助排查内存问题案例
https://www.modb.pro/db/557714 从前面几篇文章,我们了解了 NMT 的基础知识以及 NMT 追踪区域分析的相关内容,本篇文章将为大家介绍一下使用 NMT 协助排查内存问题 ...