Springboot允许您将配置外部化,以便在不同的环境中使用相同的应用程序代码。可以使用properties文件、yaml文件、环境变量和命令行参数来外部化配置。属性值可以通过使用@Value注释直接注入bean,通过Spring的环境抽象访问,或者通过@ConfigurationProperties绑定到结构化对象。

Springboo使用了一个非常特殊的 PropertySource 顺序,该顺序设计为允许合理地覆盖值。属性按以下顺序考虑:

1、开发工具主目录上的全局设置属性(~/.spring-boot-devtools.properties,当开发工具处于活动状态时)

2、测试中的@TestPropertySource注解

3、测试的属性。在@SpringBootTest和测试注释上提供,用于测试应用程序的特定部分。

4、命令行参数

5、SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联json)。

6、ServletConfig 初始化参数

7、ServletContext 初始化参数

8、java:comp/env的JNDI参数

9、Java系统属性(System.getProperties()).

10、操作系统环境变量.

11、RandomValuePropertySource,其属性仅为random.*。

12、在打包的JAR之外配置特定的应用程序属性(application-{profile}.properties和yaml变量)。

13、在打包的JAR之中配置特定的应用程序属性(application-{profile}.properties和yaml变量)

14、打包JAR之外的应用程序属性(application.properties和yaml变量)。

15、打包JAR之内的应用程序属性(application.properties和yaml变量)。

16、@PropertySource注解在你的@Configuration 类.

17、默认属性(通过设置SpringApplication.setDefaultProperties指定)。

为了提供一个具体的示例,假设您开发了一个使用name属性的@Component,如下例所示:

import org.springframework.stereotype.*;

import org.springframework.beans.factory.annotation.*;

@Component

public class MyBean{

@Value("${name}")

private String name;

// ...

}

在应用程序类路径(例如,在JAR中)上,可以有一个application.properties文件,该文件为name提供了一个合理的默认属性值。在新环境中运行时,可以在jar外部提供application.properties文件来覆盖名称。对于一次性测试,您可以使用特定的命令行开关(例如,java -jar app.jar --name="Spring")启动。

可以在命令行上使用环境变量提供SPRING_APPLICATION_JSON属性。例如,可以在un*x shell中使用以下行:

$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar

在前面的示例中,您将在Spring环境中得到 acme.name=test。您还可以在系统属性中以spring.application.json的形式提供json,如下例所示:

$java -Dspring.application.json='{"name":"test"}' -jar myapp.jar

还可以使用命令行参数提供JSON,如下例所示:

$java -jar myapp.jar --spring.application.json='{"name":"test"}'

您还可以将JSON提供为JNDI变量,如下:java:comp/env/spring.application.json

bean覆盖 springboot_Springboot配置加载覆盖值顺序相关推荐

  1. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  2. 二、SpringBoot配置-简述配置加载原理

    springboot使用一个全局配置文件 application.properties application.yml 配置文件放在src/main/resources目录或者类路径/config下 ...

  3. Spring boot外部配置加载顺序

    外部配置加载顺序 Spring boot 可以从以下位置加载配置 优先级从高到低 高优先级的配置,覆盖低优先级的配置 所有的配置,会形成互补配置 官网,给出了17个位置 这里,只介绍常用的11个位置 ...

  4. SpringBoot_配置-外部配置加载顺序

    接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,配置可以写在我们的配置文件,application.properties,放到类路径 ...

  5. Dubbo(十)之配置加载流程

    转载自  Dubbo配置加载流程 Dubbo 中的配置加载流程介绍 此篇文档主要讲在应用启动阶段,Dubbo框架如何将所需要的配置采集起来(包括应用配置.注册中心配置.服务配置等),以完成服务的暴露和 ...

  6. 配置文件加载位置||外部配置加载顺序||自动配置原理

    配置文件加载位置 SpringBoot会从这四个位置全部加载主配置文件:互补配置: 外部配置加载顺序 自动配置原理 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置 ...

  7. 对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置)

    前言 在SpringBoot应用程序中会有很多的地方定义配置文件,如: bootstrap.properties application.properties 或者是SpringCloud中定义的远程 ...

  8. Soul网关源码阅读(九)插件配置加载初探

    Soul网关源码阅读(九)插件配置加载初探 简介     今日来探索一下插件的初始化,及相关的配置的加载 源码Debug 插件初始化     首先来到我们非常熟悉的插件链调用的类: SoulWebHa ...

  9. Nginx配置及配置加载

    Nginx配置(Directives) Nginx默认配置 worker_processes 1;events {worker_connections 1024; }http {include mim ...

最新文章

  1. python file_python3之File文件方法
  2. Android+高通 MIPI转LVDS显示屏调试之---基于SD65DSI84
  3. Matlab的不同进制转换
  4. 结合代码详细聊聊 Java 网络编程中的 BIO、NIO 和 AIO
  5. diff git 代码实现_Git 自救指南:这些坑你都跳得出吗?
  6. java oop入门_java入门(十六) | OOP(三)之构造方法
  7. python读excel字体颜色_python操作excel之设置字体颜色及格式
  8. vue+nodejs 将canvas发布到dlna投屏服务
  9. 微信多开txt_微信(电脑版)多开教程
  10. 鸢尾花分类_基于鸢尾花(iris)数据集的逻辑回归分类实践
  11. 一个华为设备防病毒 ACL 配置
  12. 用Python快速找到出现次数最多的数据
  13. java电器类代码_阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。...
  14. java进销存管理系统设计_基于JAVA的企业进销存管理系统的设计与实现
  15. 百度竞价账户关键词分类
  16. JAVA储存_关于JAVA数据储存
  17. 脱口而出的 “ 感谢的语言 ”
  18. 为啥linux识别螃蟹驱动,螃蟹卡 RTL8168 更新驱动解决 BBR 单线程限速
  19. allow_url_fopen和allow_url_include详解
  20. WinRAR修复解压文件

热门文章

  1. MonoDevelop笔记
  2. vim一些挺方便的功能
  3. 实用--HTML的命名规范
  4. IBATIS中关于iterate$与#的应用
  5. CentOS 5.3 已经发布!
  6. java token生成和验证_SpringBoot集成JWT生成token及校验方法过程解析
  7. Python里那些可爱的游戏模块们
  8. 用python操作mysql数据库(之批量插入数据)
  9. ThinkPHP跨控制器调用方法
  10. Linux安装好php后找不到php.ini