Spring Boot profile加载原理

Spring Boot的配置文件

Spring Boot中的配置文件,默认为application.properties 或 application.yml 或 application.yaml.

Spring Boot通过其自动配置的核心功能,动态加载开发者在配置文件中对相关功能的某些信息进行配置,从而方便了开发者对于相关功能的配置功能。

YAML 或 yml 格式配置文件,是Spring Boot 新加入的一种文件格式,关于它的介绍请查看我的博文YAML使用

Spring Boot默认配置文件加载顺序以及优先级

项目内部加载顺序

Spring Boot默认情况下加载配置文件:
classpath: 根目录
classpath: 根下config/
file:当前目录
file:./config:当前目录config/

classpath:/,classpath:/config/,file:./,file:./config/ 加载优先级自低到高,高优先级相同内容会覆盖低优先级内容,不相同内容会形成互补效果。

ConfigFileApplicationListener.java

public class ConfigFileApplicationListener
		implements EnvironmentPostProcessor, SmartApplicationListener, Ordered {

	private static final String DEFAULT_PROPERTIES = "defaultProperties";

	// 默认配置文件加载目录,且优先级自低到高。
	// Note the order is from least to most specific (last one wins)
	private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

	// 默认配置文件名称
	private static final String DEFAULT_NAMES = "application";

	private static final Set<String> NO_SEARCH_NAMES = Collections.singleton(null);

	private static final Bindable<String[]> STRING_ARRAY = Bindable.of(String[].class)


项目外部配置文件加载顺序:

当我们项目已经打成jar包后,可能会碰到重新配置某些环境信息,又不想重新打jar包,Spring Boot支持在jar包外的配置文件使用,如下:
1.命令行参数
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
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注解类上的@ImportSource
11.通过SpringApplication.setDefaultProperties指定的默认属性

由jar包外向jar包内的顺序进行扫描加载;
优先加载名称带有profile的,再加载不带profile。

自定义指定配置文件路径

通过以上我们可以发现,Spring Boot支持自定义配置扫描配置文件的路径,如下:
application-prod.yml

server:
      port: 8094

项目外,启动Spring Boot项目命令:

java -jar springboot-manual-1.0-SNAPSHOT.jar --spring.config.location=C:\Users\Desktop\test\application-prod.yml

java -jar -Dspring
在这里插入图片描述

注意:spring.config.location 或者spring.config.location在配置文件中均不生效,只有在命令行或虚拟机参数等才会生效。

Spring Boot 指定启动profile的方式

项目目录

Spring Boot 多个Profile环境配置,方便了开发人员灵活的配置运行环境,有以下几种方式:

命令行参数指定profile

将Spring Boot 打成jar包,命令行启动,uat 接口为8093。

java -jar springboot-manual-1.0-SNAPSHOT.jar --spring.profiles.active=uat
在这里插入图片描述

JVM虚拟机参数指定profile

在IDEA中点击Run–>Edit Configuration

VM options:-Dspring.profiles.active=uat

在这里插入图片描述

配置文件指定profile:

在application配置文件中增加以下:

spring:
  profiles:
    active: dev

在这里插入图片描述

操作系统环境变量 :

创建系统环境变量,例如:

spring.profiles.active -> SPRING_PROFILES_ACTIVE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值