我们如果要对普通程序的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/ymljar 包内的application-{profile}.properties/ymljar 包外的application.properties/ymljar 包外的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配置

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

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。