近来在利用闲暇时间巩固下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还支持多种外部配置方式,生效优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置

  1. 命令行参数
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的ramdom.*属性值
  6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  10. @Configuration注解类上的@PropertySource
  11. 通过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配置的更多相关文章

  1. springboot深入学习(二)-----profile配置、运行原理、web开发

    一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...

  2. SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...

  3. SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...

  4. SpringBoot入门之简单配置

    今天下载了<JavaEE开发的颠覆者SpringBoot实战>这本书,发现Spring还有好多遗漏的部分,算是又恶补了一下,今天主要是学习下SpringBoot的配置. 一.基本配置 1. ...

  5. springBoot日志框架自动配置与原理

    1.日志框架 小张:开发一个大型系统: ​ 1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件? ​ 2.框架来记录系统的一些运行时信息: ...

  6. SpringBoot系列之profles配置多环境(篇二)

    SpringBoot系列之profles配置多环境(篇二) 继续上篇博客SpringBoot系列之profles配置多环境(篇一)之后,继续写一篇博客进行补充 写Spring项目时,在测试环境是一套数 ...

  7. SpringBoot系列之外部配置用法简介

    SpringBoot系列之外部配置用法简介 引用Springboot官方文档的说法,官方文档总共列举了如下用法: 1.Devtools global settings properties on yo ...

  8. springboot核心技术(二)-----自动配置原理、日志

    自动配置原理 配置文件能配置的属性参照 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Enable ...

  9. 关于SpringBoot的外部化配置使用记录

    关于SpringBoot的外部化配置使用记录 声明: 若有任何纰漏.错误请不吝指出! 记录下使用SpringBoot配置时遇到的一些麻烦,虽然这种麻烦是因为知识匮乏导致的. 记录下避免一段时间后自己又 ...

随机推荐

  1. Xshell 服务器配置

    1.新建链接  2.配置公网IP  3.输入用户名和密码

  2. DateUtils.formate()函数的“bug”

    写在前面 项目功能测试, 日期格式转换出现个诡异的问题, 转换后的时间总是和系统当前时间相差8小时, 问题是另一个项目和这个代码完全一样, DateUtils.java, 包括formatDate() ...

  3. 029_H5打包编译成IOS

    由于需要H5编写的应用在iPhone上使用,所以有了以下的需求 一. (1)下载npm,官网: http://nodejs.org/ 下载nodejs安装包 Reference:https://jin ...

  4. github加速

    访问 https://www.ipaddress.com/ 找到以下网址对应的ip,在本地hosts里面映射,或者到路由器内映射好即可. github.com assets-cdn.github.co ...

  5. LR 算法总结--斯坦福大学机器学习公开课学习笔记

    在有监督学习里面有几个逻辑上的重要组成部件[3],初略地分可以分为:模型,参数 和 目标函数.(此部分转自 XGBoost 与 Boosted Tree) 一.模型和参数   模型指给定输入xi如何去 ...

  6. 安装centos docker ce

    安装centos docker ce 移除旧的版本: $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker- ...

  7. TCP报文结构

    来自:https://blog.csdn.net/qq_32998153/article/details/79680704

  8. Why Python's Integer Division Floors ---- python int(6/-132)时答案不一致,向下取整

    leetcode150题中有一个步骤: int(6/-132) == 0 or ==-1? 在自己本地python3环境跑是int(6/-132) =0,但是提交的时候确实-1. 查找相关资料解惑: ...

  9. Apache限制IP并发数和流量控制

    使用mod_limitipconn模块限制IP并发连接数安装: wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 tar ...

  10. VUE 同一页面路由参数变化,视图不刷新的解决方案

    1.监听路由处理 watch: { $route(to, from) { // 逻辑 // 重新调用数据接口 } }, 2.beforeRouteUpdate导航守卫 路由更新时触发 beforeRo ...