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


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


相关文章
|
4天前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
53 36
|
1天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
55 17
Spring Boot 两种部署到服务器的方式
|
8天前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
155 12
|
14天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
60 8
|
27天前
|
存储 JSON 前端开发
【Spring项目】表白墙,留言板项目的实现
本文主要介绍了表白墙项目的实现,包含前端和后端代码,以及测试
|
27天前
|
JSON 前端开发 Java
|
27天前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
2月前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
353 12
|
2月前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
123 10
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
175 5