/

Spring boot 配置文件优先级

Untitled

优先级从上到下

每个PropertySource代表一个属性源,例如一个Map、一个Properties对象、一个系统环境变量集合、一个系统属性集合等。PropertySource对象有一个名称,可以通过这个名称来查找和操作它。

在Spring Boot中,配置文件的加载顺序如下:

  1. 命令行参数
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
  6. jar包外部的application-{profile}.properties或application-{profile}.yml配置文件
  7. jar包内部的application-{profile}.properties或application-{profile}.yml配置文件
  8. jar包外部的application.properties或application.yml配置文件
  9. jar包内部的application.properties或application.yml配置文件
  10. 在@Configuration注解修改的类中,通过@PropertySource注解引入的配置文件
  11. 通过SpringApplication.setDefaultProperties指定的默认属性

在这个列表中,每个源的优先级都高于它后面的源。这意味着,如果在多个源中定义了相同的属性,那么在列表中靠前的源中的属性值会覆盖靠后的源中的属性值。

修改配置文件

注入自定义的配置文件

<aside> 👉🏼

MutablePropertySources propertySources = event.getEnvironment().getPropertySources();

获取到MutablePropertySources 就可以获取所有的PropertySource

每个PropertySource代表一个属性源,例如一个Map、一个Properties对象、一个系统环境变量集合、一个系统属性集合等。PropertySource对象有一个名称,可以通过这个名称来查找和操作它。 →propertySources.get(Name)

但是有些PropertySource 是不可变的, 这种修改不了, 因为他的class也是final类型的, 通过代理模式也修改不了

Untitled


可以通过在他前面加配置文件, 这样就会优先读取自己定义的配置文件

propertySources.addAfter("random", propertySource);

</aside>