SpringBoot外部配置以及优先级
SpringBoot外部配置属性值的方式有很多种,SpringBoot为这多种配置方式指定了优先级,在属性相同的情况下,优先级高的配置方式会覆盖优先级低的配置方式。当然,如果属性不相同,则这些配置方式中的属性值都会被加载。
SpringBoot官方文档指明了这多种配置方式的优先级,按照从高到低排序如下:
(1)如果使用了Devtools,则优先级最高的是在home目录下指定的Devtools全局配置文件~/.spring-boot-devtools.properties(优先级最高)。
(2)测试用例中,标注了 @TestPropertySource 配置项;
(3)测试用例中,@SpringBootTest 注解中的 properties 属性值;
(4)命令行参数;
(5)内嵌在环境变量或者系统变量中的SPRING_APPLICATION_JSON中的属性值;
(6)ServletConfig 初始化的参数;
(7)ServletContext 初始化的参数;
(8)java:comp/env 中的JNDI属性值;
(9)Java的系统变量,通过System.getProperties()方法获取;
(10)操作系统的环境变量;
(11)RandomValuePropertySource配置的${random.*}属性值;
(12)不在项目打成可执行jar包中的application-{profile}.properties或者application-{profile}.yml文件;
(13)项目打成可执行jar包中的application-{profile}.properties或者application-{profile}.yml文件;;
(14)不在项目打成可执行jar包中的application.properties或者application.yml文件;
(15)项目打成可执行jar包中的application.properties或者application.yml文件;
(16)同时标注@Configuration和@PropertySource的类中,标注了@PropertySource指定的属性值;
(17)在main方法中设置的SpringApplication.setDefaultProperties值(优先级最低)。
在下面的例子中,包含第(4)、(14)、(15)、(16)、(17)条中的属性设置方式,这5种方式也是开发过程中用得最多的方式。需要说明的是,MyConfiguration 类中,使用@Value(“${name}”)来获取外部配置的值。
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
Map<String,Object> proMap = new HashMap<String, Object>();
proMap.put("name","(17)在main方法中设置的SpringApplication.setDefaultProperties值。");
application.setDefaultProperties(proMap);
application.run(args);
}
@Autowired
private MyConfiguration myConfiguration;
@RequestMapping("/getName")
public String getName(){
return myConfiguration.getName();
}
}
/**
* Create by qiezhichao on 2018/6/14 0014 21:59
*/
@Configuration
@PropertySource(value= {"classpath:propertySource.properties"})
public class MyConfiguration {
// @Value("${name}")来获取外部配置的值
@Value("${name}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
代码结构如图
配置命令行参数,其中–spring.config.location=X:/application.properties表示加载本地磁盘X下的 application.properties 文件。
执行main方法,在浏览器输入http://localhost:8080/getName 得到如下结果
对于随机值的配置,官方文档指明可以使用${random.*}(通常在application.properties或者application.yml文件中)来注入随机值。
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
对于命令行参数,通过 java -jar app.jar –name=”SpringBoot” –server.port=9090 的方式来传递参数。参数用 –xxx=xxx 的形式传入。如果我们想禁用命令行参数,可以使用SpringApplication.setAddCommandLineProperties(false)的方法禁止命令行配置参数传入。
————————————————
版权声明:本文为CSDN博主「rm杠rf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhichao_qzc/article/details/80698755
SpringBoot外部配置以及优先级的更多相关文章
- SpringBoot外部配置
Spring Boot的配置文件 Spring Boot使用一个全局的配置文件application.properties或者application.yml(yaml语言的配置文件),放置在src/m ...
- SpringBoot外部配置属性注入
一.命令行参数配置 Spring Boot可以是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行: java -jar xx.jar 那么就可以通过命令行改变相关配置参数.例如默认tom ...
- SpringBoot系列之外部配置用法简介
SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- SpringBoot外部化配置使用Plus版
本文如有任何纰漏.错误,请不吝指正! PS: 之前写过一篇关于SpringBoo中使用配置文件的一些姿势,不过嘛,有句话(我)说的好:曾见小桥流水,未睹观音坐莲!所以再写一篇增强版,以便记录. 序言 ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...
- SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...
- 补习系列(10)-springboot 之配置读取
目录 简介 一.配置样例 二.如何注入配置 1. 缺省配置文件 2. 使用注解 3. 启动参数 还有.. 三.如何读取配置 @Value 注解 Environment 接口 @Configuratio ...
- SpringBoot之配置
回顾 SpringBoot之基础 配置文件 ① 两种全局配置文件(文件名是固定的) 配置文件放在src/main/resources目录或者类路径/config下 application.proper ...
随机推荐
- 墨天轮沙龙 | 亚马逊云科技李君:见微知著 - Serverless云原生数据库概览
导读 以业务为导向的数据库需要满足现代化应用的需要,以 Serverless 数据库为代表,云数据库正在迅速发展成熟,并带来更好的可访问性和高可用性,还有高扩展性与可迁移性. [墨天轮数据库沙龙-Se ...
- 数组对象删除不满足某些条件的对象 js
recursiveFunction(items, childrenNodeName, ids) { console.log('items', ids); // 获取数组长度 if (items) it ...
- python中的时间处理
python程序编写中的时间处理涉及三种: 1.时间的显示: 2.时间的转换: 3.时间的运算. 时间处理模块:time模块 时间的三种表示方式: ①时间戳,从1970年1月1日开始,每过1s增加1, ...
- ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南
作者:运维有术 前言 知识点 定级:入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 ...
- 高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%
为什么要优化 Ngin HTTPS 延迟 Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer).反向代理 (Reverse Proxy),以及网关 (Gateway) 等 ...
- layui下拉框xm-select自定义搜索使用方法
xm-select介绍 始于Layui, 下拉选择框的多选解决方案 git地址:https://gitee.com/maplemei/xm-select 文档说明:https://codecp.tec ...
- 如果让你处理hbase 怎么保证数据的安全性可靠性 不需要具体的设置 要一套方案
有关数据安全及可靠我们认为大体上分为存储安全和使用安全 1 数据存储安全 hbase是基于hdfs的一种数据存储解决方案,所以有关数据的安全性可靠性可以利用hdfs自身的副本机制保障.另外原生的hba ...
- MySQL中varchar(10)和varchar(100)的优缺点
许多使用MySQL的同学都会使用到varchar这个数据类型.初学者刚开始学习varchar时,一定记得varchar是个变长的类型这个知识点,所以很多初学者在设计表时,就会把varchar(X)的长 ...
- 如何在HarmonyOS Next中编译React-Native包
一.创作背景 鸿蒙既出,万众瞩目.作为国内操作系统自力更生的代表,它承载着十四亿中国人民的强烈期望,系国家安全和国运于一身.就算抛开爱国情怀不谈,作为一名软件开发人员,偌大的就业市场,海量的翻身机会就 ...
- Air780EP之RC522开发板,你了解吗?
本文讲解合宙Air780EP开发板RC522实例. 本文档适用于Air780EP开发板: 关联文档和使用工具: rc522 - rc522 非接触式读写卡驱动 - LuatOS 文档: LuatO ...