【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)(下)

简介: 【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)(下)

外部配置(非常重要)


先看官网怎么说吧


image.png


中文翻译:


image.png


优先级从高到低(本文只解释较为常用的):


  1. 命令行参数(所以我们java -jar启动时指定的参数优先级最高啊)
    所有的配置都可以在命令行上进行指定;
    多个配置用空格分开; --配置项=值


--server.port=8087 --server.context-path=/abc


  1. Java系统属性(System.getProperties())
    由此课件,Spring启动的时候,默认会把系统的很多属性都默认加载进来。



    @Test
    public void contextLoads() {
        //看看spring容易里面是否存在系统属性
        System.out.println(environment.containsProperty("user.name"));
        System.out.println(environment.containsProperty("java.runtime.name"));
        System.out.println(environment.containsProperty("user.dir"));
        System.out.println(environment.containsProperty("os.name"));
        System.out.println(environment.containsProperty("sun.boot.library.path"));
        //打印系统的所有属性(很多的系统属性)
        Properties properties = System.getProperties();
        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
            System.out.println(entry);
        }
    }
输出:
一路true


Tips:因此你自定义key的时候,应该去避免和系统自带的key重名,否则不起作用。


操作系统环境变量(比如操作系统的username等等,下面讲@Value的时候会介绍这个坑)


RandomValuePropertySource配置的random.*属性值


jar包外部的application-{profile}.properties配置文件


jar包内部的application-{profile}.properties配置文件


jar包外部的application.properties配置文件(此级别在测试环境经常使用。比如就在jar包同级目录放置一个配置文件,就内覆盖jar包内部所有的配置文件了)


jar包内部的application.properties配置文件

由jar包外向jar包内进行寻找,优先加载待profile的,再加载不带profile的。


@Configuration注解类上的@PropertySource(手动指定导入外部配置文件)


通过SpringApplication.setDefaultProperties指定的默认属性,自己程序代码里设置,优先级最低


加载了外部配置,还会记载内部配置吗?


我通过一个小实验来证明


//读取外部配置的key
        System.out.println(environment.getProperty("abcd"));
        //读取内部配置的key
        System.out.println(environment.getProperty("config.icon"));


内部配置:


config.icon=classpath:resource


外部配置:


abcd=abcd


结构如下图:


image.png

我用java -jar启动后,结果是:

内、外部配置的key对应的value都能输出


因此我们可以得出结论:不管内部、外部配置,形成的都是互补配置,都会加载


相关文章
|
2天前
|
SQL Java 调度
实时计算 Flink版产品使用问题之使用Spring Boot启动Flink处理任务时,使用Spring Boot的@Scheduled注解进行定时任务调度,出现内存占用过高,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
9天前
|
SQL XML Java
解决Spring Boot项目中的数据库迁移问题
解决Spring Boot项目中的数据库迁移问题
|
10天前
|
负载均衡 Java 开发者
如何在Spring Boot项目中实现微服务架构?
如何在Spring Boot项目中实现微服务架构?
|
10天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的软件项目管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的软件项目管理系统附带文章源码部署视频讲解等
9 0
|
10天前
|
XML 前端开发 Java
Spring Boot与Spring MVC的区别和联系
Spring Boot与Spring MVC的区别和联系
|
11天前
|
SQL XML Java
解决Spring Boot项目中的数据库迁移问题
解决Spring Boot项目中的数据库迁移问题
|
13天前
|
JavaScript Java 关系型数据库
青戈大佬部署SpringBoot+Vue项目资料,vue中配置文件 .env.development,在Vue目录下 Find in Files
青戈大佬部署SpringBoot+Vue项目资料,vue中配置文件 .env.development,在Vue目录下 Find in Files
|
14天前
|
JavaScript Java
视频,音视频一个用Springboot + Vue开发的仿B站项目
视频,音视频一个用Springboot + Vue开发的仿B站项目
|
XML 缓存 Java
聊聊Spring内部的依赖管理(下)
聊聊Spring内部的依赖管理(下)
148 0

热门文章

最新文章