SpringBoot配置文件加载的优先级及自定义配置
Spring Boot使用一个非常特殊的PropertySource顺序,旨在允许合理的值重写,越靠前优先级越高。属性按以下顺序考虑:
- 开发者工具
Devtools全局配置参数
在IDEA或Eclipse中,安装并启用Spring Boot Devtools插件。打开项目的Settings(或Preferences),在Build, Execution, Deployment下面的Compiler中找到Build process VM options, 在后面的文本框中输入devtools全局配置参数(如:-Dspring.devtools.restart.pollInterval=3000)即可。
- 单元测试上的
@TestPropertySource注解指定的参数
在测试类中使用@TestPropertySource注解指定测试时使用的配置文件(如:@TestPropertySource(locations = "classpath:test.properties"))。
- 单元测试上的
@SpringBootTest注解指定的参数
在SpringBoot测试类中使用@SpringBootTest注解指定测试时使用的配置文件和其他的属性(如:@SpringBootTest(properties = {"test.name=test", "test.age=18"}))。
- 命令行指定的参数,如
java -jar springboot.jar --name="xxx"
在命令行中启动应用程序时,指定需要覆盖的属性参数(如:java -jar springboot.jar --name="xxx")。
- 命令行中的
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)。
ServletConfig初始化参数
在Servlet的初始化方法中,使用getInitParameter方法获取参数(如:String name = config.getInitParameter("name"))。
ServletContext初始化参数
在Servlet的初始化方法中,使用getServletContext().getInitParameter方法获取参数(如:String name = config.getServletContext().getInitParameter("name"))。
JNDI参数(如java:comp/env/spring.application.json)
使用JNDI API来获取参数,如:InitialContext context = new InitialContext(); String name = (String) context.lookup("java:comp/env/spring.application.json");
Java系统参数(来源:System.getProperties())
使用System.getProperties()方法来获取Java系统参数(如:String name = System.getProperties().getProperty("name"))。
- 操作系统环境变量参数
使用System.getenv()方法来获取操作系统环境变量参数(如:String name = System.getenv("name"))。
RandomValuePropertySource随机数,仅匹配:ramdom.*
在配置文件中使用以random.开头的属性名称,Spring Boot会自动替换该属性的值为对应的随机数。
JAR包外面的配置文件参数(application-{profile}.properties/yaml)
在项目的配置文件夹下新建对应的配置文件(如:application-dev.properties),并在该文件中设置需要的属性信息。
JAR包里面的配置文件参数(application-{profile}.properties/yaml)
在JAR包内部,新建resources文件夹,然后在该文件夹下新建对应的配置文件(如:application-prod.properties)。
JAR包外面的配置文件参数(application.properties/yaml)
在项目的配置文件夹下新建application.properties或application.yaml文件,并在该文件中设置需要的属性信息。
JAR包里面的配置文件参数(application.properties/yaml)
在JAR包内部,新建resources文件夹,然后在该文件夹下新建application.properties或application.yaml文件,并在该文件中设置需要的属性信息。
@Configuration配置文件上@PropertySource注解加载的参数
在@Configuration注解的Java类上,添加@PropertySource注解指定属性文件的路径(如:@PropertySource("classpath:test.properties"))。
- 默认参数(通过
SpringApplication.setDefaultProperties指定)
在启动Spring Boot应用程序时,通过SpringApplication.setDefaultProperties指定默认的配置属性(如:SpringApplication.setDefaultProperties(Collections.singletonMap("name", "default")))。
常用的方式有如下几种:
springboot的4级配置文件
1级:file:./config/application.yml 【最高】
2级:file:./application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
作用:
-
1级与2级留做系统打包后设置通用配置,1级通常用于运维经理进行线上整体项目部署方案调控
-
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控
配置文件 yml、yaml、properties
当properties、yaml和yml三种文件路径相同时,三个文件中的配置信息都会生效,但是当三个文件中有配置信息冲突时,加载顺序是:
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!