SpringBoot之多Profile配置
近来在利用闲暇时间巩固下SpringBoot的基本知识,然后自己也做一些笔记,整理下当时所学知识,后面就干脆写到这里来了。
多Profile配置文件
在SpringBoot主配置文件编写的时候,文件名可以是application-{profile}.properties/yml。
默认使用的是application.properties配置文件的配置。
applicaiton.properties application-dev.properties application-test.properties application-prod.properties
激活指定配置文件
1、主配置文件中指定激活的profile
如果是properties格式的配置文件,那么可以在主配置文件中这样指定激活的profile:
spring.profiles.active = dev
如果是yml格式的配置文件,你可以用“---”来划分文档块,每个文档块都被看作是一个profile,你可以在主文档块中指定生效的profile:
server:
prot:
spring:
profiles:
active: dev # 指定激活哪个配置文件 # yml格式配置文件中,用三个横线来区分文档块
# 第一个文档块表示主文档块,并同时指定后续生效的是哪个文档块 ---
# 第二个文档块
server:
port:
spring:
profiles: dev # 声明文档块类型 ---
# 第三个文档块
server:
port:
spring:
profiles: dev
2、命令行激活
在实际生产环境中直接使用命令行启动项目,启动的同时可以指定激活的profile:
java -jar --spring.profiles.active=dev my-spring-boot-app.1.0.0.jar
3、设置虚拟机参数激活
同样,你可以通过设置Java虚拟机参数的方式来激活指定profile:
[vm options:] -Dspring.profiles.action=dev
IDEA编辑器设置:
命令行指定的方式和虚拟机参数设置的方式指定,都可以在IDEA的运行设置中进行配置,如下图:

加载位置与顺序
SpringBoot启动会扫描以下位置的application.properties/yml文件作为spring boot的默认配置文件:
file:./config/
file:./
classpath:/config/
classpath:/
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置;当然,我们也可以通过spring.config.location来改变默认配置。
上面的:
- file: 指当前项目根目录
 - classpath: 指当前项目的resources目录
 
给出一个图例:

注意:maven打包是不能把src外面的两个application.properties文件打到jar包里的。
在项目打包好之后,我们可以通过命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件会共同生效,并形成互补配置。

这在运维的时候很有用,因为可以通过命令行的方式指定生效的配置文件,较为灵活。
外部配置
SpringBoot还支持多种外部配置方式,生效优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置。
- 命令行参数
 - 来自java:comp/env的JNDI属性
 - Java系统属性(System.getProperties())
 - 操作系统环境变量
 - RandomValuePropertySource配置的ramdom.*属性值
 - jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
 - jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
 - jar包外部的application.properties或application.yml(不带spring.profile)配置文件
 - jar包内部的application.properties或application.yml(不带spring.profile)配置文件
 - @Configuration注解类上的@PropertySource
 - 通过SpringApplication.setDefaultProperties指定的默认属性
 
其实在官网有17种这样的配置说明,可以从下面进入:
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html
重点关注上面列举的1、6、7、8、9这几项,生效的配置文件,都是由jar包外向jar包内进行寻找的,优先加载带profile,再加载不带profile的。比如有个application.properties的配置文件和xxx.jar放置在同一个目录,那么项目启动时一定是先加载这个application.properties文件,再去加载xxx.jar里面的配置文件的。
参考资料
1、https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/
SpringBoot之多Profile配置的更多相关文章
- springboot深入学习(二)-----profile配置、运行原理、web开发
		
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
 - SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
		
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...
 - SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
		
1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...
 - SpringBoot入门之简单配置
		
今天下载了<JavaEE开发的颠覆者SpringBoot实战>这本书,发现Spring还有好多遗漏的部分,算是又恶补了一下,今天主要是学习下SpringBoot的配置. 一.基本配置 1. ...
 - springBoot日志框架自动配置与原理
		
1.日志框架 小张:开发一个大型系统:  1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?  2.框架来记录系统的一些运行时信息: ...
 - SpringBoot系列之profles配置多环境(篇二)
		
SpringBoot系列之profles配置多环境(篇二) 继续上篇博客SpringBoot系列之profles配置多环境(篇一)之后,继续写一篇博客进行补充 写Spring项目时,在测试环境是一套数 ...
 - SpringBoot系列之外部配置用法简介
		
SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...
 - springboot核心技术(二)-----自动配置原理、日志
		
自动配置原理 配置文件能配置的属性参照 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Enable ...
 - 关于SpringBoot的外部化配置使用记录
		
关于SpringBoot的外部化配置使用记录 声明: 若有任何纰漏.错误请不吝指出! 记录下使用SpringBoot配置时遇到的一些麻烦,虽然这种麻烦是因为知识匮乏导致的. 记录下避免一段时间后自己又 ...
 
随机推荐
- 每天一个命令-cp 命令
			
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...
 - js Map的使用
			
setExpenseAndAmountSum: function() { var detailList = vehicleVueObj.vehicleData; var expenseAmountSu ...
 - lastlogon
			
function Get-ADUserLastLogon($userName) { $dcs = Get-ADDomainController -Filter {Name -like "*& ...
 - Incorrect string value: '\xF0\x9F\x98\xAD",...' for column 'commentContent' at row 1
			
我分为下面三个步骤来解决: (1):修改mysql数据库的编码为uft8mb4 (2):修改数据表的编码为utf8mb4 (3):修改连接数据库的连接代码 更改数据库编码:ALTER DATABASE ...
 - parquet 简介(转)
			
原文 Parquet 列式存储格式 面向分析型业务的列式存储格式 由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目 ...
 - SSL证书原理讲解
			
一直以来都对数字证书的签发,以及信任等事情一知半解.总算有个闲适的周末来总结和深入一下相关的知识. CA: CA(Certificate Authority)是证书的签发机构,它是负责管理和签发证书的 ...
 - android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件
			
//android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件 遇到这个问题好久了,一直没解决今天搜集了大量的资料,有的说什么Java没配置好,不是扯犊子吗 ...
 - SpringBoot入门-集成mybatis(四)
			
pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
 - C# IL 生成EXE
			
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ilasm /exe /output=C:\datacapture.exe /Resource=data ...
 - java CountDownLatch报错java.lang.IllegalMonitorStateException: null
			
笔者使用websocket进行通信,服务器异步返回.websocket服务器又异步调用其他websocket,也是异步访问. 由于无法预测服务器调用第三方websocket什么时候调用结束,使用了Co ...