【小家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都能输出


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


相关文章
|
7天前
|
SQL Java 数据库连接
(自用)Spring常用配置
(自用)Spring常用配置
13 0
|
10天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
6天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
13 1
|
7天前
|
Java 数据库连接 Spring
简化配置,提高灵活性:Spring中的参数化配置技巧
简化配置,提高灵活性:Spring中的参数化配置技巧
15 0
|
7天前
|
Java Shell 测试技术
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
16 0
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
|
10天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
12 0
|
Java 数据库
【SpringBoot】项目属性配置
【SpringBoot】项目属性配置
108 0
|
Java Spring
SpringBoot(二)_项目属性配置
修改端口 在main/resources/application.properties修改端口 server.port=8088 此时启动访问localhost:8088/hello 就会看到 Hello Spring Boot! 使用yml文件替换properties 文件 (1)在main/resources 文件下新建一个application.
1185 0
|
21天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
38 0
|
29天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
106 0