SpringBoot 的 bootstrap 和 application 配置文件

摘要:
默认情况下,SpringBoot支持属性和YAML格式的配置文件,引导程序和应用程序之间存在差异。引导配置文件在应用程序配置文件之前加载。它将首先创建一个初始化BootstrapContext,然后创建一个应用于早期配置信息的初始化ApplicationContext。可以理解,系统配置引导和应用程序共享

SpringBoot 默认支持 properties 和 YAML 两种格式的配置文件,并且有 bootstrap 和 application 两种配置文件


两者的区别

  • bootstrap 配置文件先于 application 配置文件被加载,会先创建初始化 Bootstrap Context,再创建初始化 Application Context,应用于更早期的配置信息,可以理解为系统配置
  • bootstrap 和 application 共享同一个 Environment,默认情况下,bootstrap 的配置不会被覆盖,而 application 的配置项可以被覆盖(比如被 application-dev 覆盖,或被 java 命令行覆盖)

应用 bootstrap 的例子

  • 比如从 Spring Cloud Config 和 Consul 获取配置的时候,由于初始化 Application Context 的时候需要知道如何去 Config/Consul 获取配置,所以 Config/Consul 基本信息就不能写到 application.yml 等到 Application Context 初始化时才读取,必须在 bootstrap.yml 里配置,这样 Application Context 初始化时才能知道需要去 Config/Consul 获取配置,并且知道 Config/Consul 的基本信息
  • 比如一些固定的不希望被覆盖的属性,如程序的名字
  • 比如一些加解密的场景

application 的配置可以有多个,比如 application.yml,application-dev.yml,application-prod.yml

在 application.yml 可以这样指定

spring:
  profiles:
    active: dev

这样 SpringBoot 在加载 application.yml 后还会加载 application-dev.yml
并且如果两个文件有相同的配置项,那么 application.yml 的会被 application-dev.yml 的覆盖


配置文件可以存在 4 个地方,按优先级从高到低是

  • 项目根目录下的 config 文件夹
  • 项目根目录
  • classpath 下的 config 文件夹
  • classpath

也可以在 java 命令指定

java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.config.location=~/application.yml

还可以在 java 命令中覆盖配置项

java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod --server.port=8081

这里指定了新的 port 和 profile



免责声明:文章转载自《SpringBoot 的 bootstrap 和 application 配置文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android中数据库的操作流程详解移动端常见的不同苹果手机media query汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]天龙八部服务器端-共享内存的设计

一、服务器构架 一个天龙八部游戏区,主要服务器部署情况如下图所示: 实际部署可能有所不同。区角色数据库可以安装到Machine4,那么一个区有5台物理机器。LoginServer和WorldServer、CharacterDB、BillingServer有连接。WorldServer和各个GameServer有连接。ShareMemory和Chara...

Android开发——Android系统启动以及APK安装、启动过程

0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的?   1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,CPU复位之后,程序指针会指向启动地址,从该地址读取并直接运行启动程序的可执行代码,或者将可执行代码与数据载入CPU内置的RAM中再运行。这...

如何分析和提高(C/C++)程序的编译速度?

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.cnblogs.com/lihuidashen/p/12937085.html 微信链接:https://mp.weixin.qq.com/s/MFOaa-Dw1iNMXuXPfXjLBA 一个别人的vs 2010 的程序...

C++星号的含义

[转载] [http://blog.sina.com.cn/s/blog_4a50d85b0100uk3c.html]   1、乘法运算符   2、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇...

Asp.net mvc与PHP的Session共享的实现

最近在做的一个ASP.NET MVC的项目,要用到第三方的php系统,为了实现两个系统的互联互通。决定将两者的session打通共享。让asp.net mvc 和php 都能正常访问和修改Session内容。 在决定实现之前,先搜索了一下院子里有没有相类似的文章,对于跨语言的程序互通,有两种方案: (1) SSO单点登录,其实就是把用户名和密码传给另一个系...

Oracle Data Guard

DG是 Oracle Data Guard的简称。也就是Oracle11g的 数据卫士。 由于在工作中 Oracle和 SQL SERVER2008 同时都需要维护管理。给我的感觉这里的 DG 其实和 Sql Server 2008的镜像实现的功能是一样的(当然更强大一些)。DG 中的物理备用库 尤其和 Sql Server 2008 的镜像实现的功能是一...