怎么给网站做动图申晨推荐的营销网站
我们如果要对普通程序的jar包更改配置,那么我们需要对jar包解压,并在其中的配置文件中更改配置参数,然后再打包并重新运行。可以看到过程比较繁琐,SpringBoot也注意到了这个问题,其可以通过外部配置文件更新配置。
我们只需要给jar应用所在的文件夹放一个application.properties最新配置文件,重启项目就能自动应用最新配置。下面就进行详细介绍。
1. 配置优先级
Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。我们可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数。@Value可以获取值,也可以用@ConfigurationProperties将所有属性绑定到java object中。
以下是 SpringBoot 属性源加载顺序。优先级由低到高,高优先级配置覆盖低优先级
- 默认属性(通过SpringApplication.setDefaultProperties指定的)
 - @PropertySource指定加载的配置(需要写在@Configuration类上才可生效)
 - 配置文件(application.properties/yml等)
 - RandomValuePropertySource支持的random.*配置(如:@Value(“${random.int}”))
 - OS 环境变量
 - Java 系统属性(System.getProperties())
 - JNDI 属性(来自java:comp/env)
 - ServletContext 初始化参数
 - ServletConfig 初始化参数
 - SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的 JSON)
 - 命令行参数
 - 测试属性。(@SpringBootTest进行测试时指定的属性)
 - 测试类@TestPropertySource注解
 - Devtools 设置的全局属性。($HOME/.config/spring-boot)
 
结论:配置可以写到很多位置,常见的优先级顺序:
- 命令行> 配置文件> springapplication配置
 
配置文件也有很多种,具体优先级如下:(后面覆盖前面)
- jar 包内的application.properties/yml
 - jar 包内的application-{profile}.properties/yml
 - jar 包外的application.properties/yml
 - jar 包外的application-{profile}.properties/yml
 
建议:用一种格式的配置文件。如果.properties和.yml同时存在,则.properties优先
结论:包外 > 包内; 同级情况:profile配置 > application配置
例如我们当前有以下配置信息:
- 包内: application.properties server.port=8000
 - 包内: application-dev.properties server.port=9000
 - 包外: application.properties server.port=8001
 - 包外: application-dev.properties server.port=9001
 
以上配置优先级为:命令行 > 9001 > 8001 > 9000 > 8000
2. 外部配置
SpringBoot 应用启动时会自动寻找application.properties和application.yaml位置,进行加载。顺序如下:(后面覆盖前面)
- 类路径: 内部 
- 类根路径
 - 类下/config包
 
 - 当前路径(项目所在的位置) 
- 当前路径
 - 当前下/config子目录
 - /config目录的直接子目录
 
 
最终效果:优先级由高到低,前面覆盖后面
- 命令行 > 包外config直接子目录 > 包外config目录 > 包外根目录 > 包内目录
 - 同级比较: 
- profile配置 > 默认配置
 - properties配置 > yaml配置
 
 

从图上可以更直观的看到,越向外的配置文件优先级越高
