SpringBoot配置文件加载的优先级及自定义配置

发布时间:2023年12月17日

Spring Boot使用一个非常特殊的PropertySource顺序,旨在允许合理的值重写,越靠前优先级越高。属性按以下顺序考虑:

  1. 开发者工具Devtools全局配置参数

IDEAEclipse中,安装并启用Spring Boot Devtools插件。打开项目的Settings(或Preferences),在Build, Execution, Deployment下面的Compiler中找到Build process VM options, 在后面的文本框中输入devtools全局配置参数(如:-Dspring.devtools.restart.pollInterval=3000)即可。

  1. 单元测试上的@TestPropertySource注解指定的参数

在测试类中使用@TestPropertySource注解指定测试时使用的配置文件(如:@TestPropertySource(locations = "classpath:test.properties"))。

  1. 单元测试上的@SpringBootTest注解指定的参数

SpringBoot测试类中使用@SpringBootTest注解指定测试时使用的配置文件和其他的属性(如:@SpringBootTest(properties = {"test.name=test", "test.age=18"}))。

  1. 命令行指定的参数,如java -jar springboot.jar --name="xxx"

在命令行中启动应用程序时,指定需要覆盖的属性参数(如:java -jar springboot.jar --name="xxx")。

  1. 命令行中的SPRING_APPLICATION_JSON指定参数,如java -Dspring.application.json='{"name":"xxx"}' -jar springboot.jar

在命令行中启动应用程序时,使用SPRING_APPLICATION_JSON来传递JSON格式的参数(如:java -Dspring.application.json='{"name":"xxx"}' -jar springboot.jar)。

  1. ServletConfig初始化参数

Servlet的初始化方法中,使用getInitParameter方法获取参数(如:String name = config.getInitParameter("name"))。

  1. ServletContext初始化参数

Servlet的初始化方法中,使用getServletContext().getInitParameter方法获取参数(如:String name = config.getServletContext().getInitParameter("name"))。

  1. JNDI参数(如java:comp/env/spring.application.json

使用JNDI API来获取参数,如:InitialContext context = new InitialContext(); String name = (String) context.lookup("java:comp/env/spring.application.json");

  1. Java系统参数(来源:System.getProperties()

使用System.getProperties()方法来获取Java系统参数(如:String name = System.getProperties().getProperty("name"))。

  1. 操作系统环境变量参数

使用System.getenv()方法来获取操作系统环境变量参数(如:String name = System.getenv("name"))。

  1. RandomValuePropertySource随机数,仅匹配:ramdom.*

在配置文件中使用以random.开头的属性名称,Spring Boot会自动替换该属性的值为对应的随机数。

  1. JAR包外面的配置文件参数(application-{profile}.properties/yaml

在项目的配置文件夹下新建对应的配置文件(如:application-dev.properties),并在该文件中设置需要的属性信息。

  1. JAR包里面的配置文件参数(application-{profile}.properties/yaml

JAR包内部,新建resources文件夹,然后在该文件夹下新建对应的配置文件(如:application-prod.properties)。

  1. JAR包外面的配置文件参数(application.properties/yaml

在项目的配置文件夹下新建application.propertiesapplication.yaml文件,并在该文件中设置需要的属性信息。

  1. JAR包里面的配置文件参数(application.properties/yaml

JAR包内部,新建resources文件夹,然后在该文件夹下新建application.propertiesapplication.yaml文件,并在该文件中设置需要的属性信息。

  1. @Configuration配置文件上@PropertySource注解加载的参数

@Configuration注解的Java类上,添加@PropertySource注解指定属性文件的路径(如:@PropertySource("classpath:test.properties"))。

  1. 默认参数(通过SpringApplication.setDefaultProperties指定)

在启动Spring Boot应用程序时,通过SpringApplication.setDefaultProperties指定默认的配置属性(如:SpringApplication.setDefaultProperties(Collections.singletonMap("name", "default")))。

常用的方式有如下几种:

springboot的4级配置文件

1级:file./config/application.yml 【最高】

2级:file./application.yml

3级:classpathconfig/application.yml

4级:classpathapplication.yml 【最低】

作用:
  • 1级与2级留做系统打包后设置通用配置,1级通常用于运维经理进行线上整体项目部署方案调控

  • 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

配置文件 ymlyamlproperties

propertiesyamlyml三种文件路径相同时,三个文件中的配置信息都会生效,但是当三个文件中有配置信息冲突时,加载顺序是:

1级:properties文件 【最高】

2级:yml文件

3级:yaml文件 【最低】

idea中指定配置文件

指定配置文件--spring.config.location

Configurations中的Program arguments指定加载外部配置文件,使用--spring.config.location指定/yml/application.yml下的文件

在这里插入图片描述

java -jar 命令

命令指定配置文件java -jar -Dspring.config.location或者属性java -jar springboot.jar --name="xxx"

比如说,使用docker部署项目的时候,我们可以使用:

java -jar -Dspring.config.location=/admin/yml/application.yml指定加载外部的配置,而不使用jar里面的

docker run --privileged -d -p 58070:8799  --name cic-admin openjdk:11  java -jar -Dspring.config.location=/admin/yml/application.yml -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08  /admin/jar/cic-admin.jar
文章来源:https://blog.csdn.net/qq_37726813/article/details/135044874
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。