18、springboot默认的配置文件及导入额外配置文件

springboot默认的配置文件及导入额外配置文件

★ Spring Boot默认加载的配置文件:

 (1) 类加载路径(resources目录)application.properties|yml  (相当于JAR包内)
 optional: classpath:/
(2)类加载路径下的/config包(resources/config)。 (相当于JAR包内)
 optional: classpath:/config/

 【备注】:上面类加载路径及载路径下config子目录,当应用被打包后,它们就被打包到了JAR包中。
(3)当前路径。(相当于JAR包外)
     c:\abc\xyz> java -jar test.jar(Spring Boot应用)

 optional: file:./
     ——执行该java命令所在的目录(c:\abc\xyz)下的application.properties|yml
(4)当前路径下的/config子目录。(相当于JAR包外)
 optional: file:./config/

(5)当前路径下的/config子目录的任意直接子目录,也就是/config/abc/、/config/xyz/等,不能是/config/abc/def/。
    (相当于JAR包外),实际上就是optional:file:./config/*/ 


 3个要点:

 1. 运行Spring Boot应用的当前目录下的配置文件会覆盖JAR包中原有的配置文件
    ——方便部署人员去添加自己的配置文件来覆盖Spring Boot应用中原有的配置。

 2. 无论是类加载路径中(JAR包),还是当前目录下(JAR包外),
    config子目录下配置文件总会被自动加载,而且优先级更高。

 3. 当前目录下,config的直接子目录下(config/abc、config/xyz)的配置文件的优先级是最高的。

★ 设置Spring Boot默认加载的配置文件:

可通过如下系统属性(或环境变量、或命令行参数)来改变配置文件的位置:

▲ spring.config.name:改变配置文件的文件名,默认值是application。
     如果用OS环境变量来设置,则该属性对应于SPRING_CONFIG_NAME环境变量名。

   它的默认值决定了Spring Boot要加载的配置文件的默认的文件名。

▲ spring.config.location:改变配置文件的加载路径。

     如果用OS环境变量来设置,则该属性对应于SPRING_CONFIG_LOCATION环境变量名。
 其默认值是5个路径:
   optional: classpath:/
   optional: classpath:/config/
   optional: file:./
   optional: file:./config/
   optional: file:./config/*/ 

  它的默认值决定了Spring Boot默认到哪些路径下搜索配置文件。


▲ spring.config.additional-location:添加额外的加载路径,不会覆盖原有的配置文件的加载路径。

 例如将spring.config.additional-location属性设置为“optional:classpath:/fkjava/,optional:file:./fkit/”,
 此时Spring Boot将依次从如下路径加载配置文件:
(1)optional:classpath:/(类加载路径的根路径)
(2)optional:classpath:/config/(类加载路径下的/config包)
(3)optional:file:./(当前路径)
(4)optional:file:./config/(当前路径下的/config子目录)
(5)optional:file:./config/*/(当前路径下的/config子目录的任意直接子目录)
(6)optional:classpath:fkjava/
(7)optional:file:./fkit/

★ 导入额外的配置文件:

- PropertiesFactoryBean | YamlPropertiesFactoryBean:将属性文件或YAML文件加载成Properties对象。
  用法很简单:直接在容器中配置PropertiesFactoryBean | YamlPropertiesFactoryBean工厂Bean即可。

- YamlMapFactoryBean:它将YAML文件加载成Map对象。
  用法很简单:直接在容器中配置YamlMapFactoryBean工厂Bean即可。

======上面两种方式只是将配置文件加载成容器中的Properties或Map Bean,并没有添加到配置环境中=====


- PropertiesPropertySourceLoader | YamlPropertySourceLoader:将属性文件或YAML文件加载成PropertySource。
  通常用于在配置环境后处理器中使用,接下来可将PropertySource添加到配置环境中。
  ——这种方式的加载时机非常早!
  
- @PropertySource注解和@TestPropertySource注解只能读取属性文件(propertie文件)
  告诉Spring Boot要去加载哪些额外的属性文件。

  【注意】 @PropertySource注解去加载属性文件时,默认所使用的字符集是操作系统相关的。
           如果你保存属性文件使用了UTF-8字符集,使用该注解时也需要通过encoding属性来指定对应的字符集。

- spring.config.import属性来指定要加载哪些额外的配置文件。

代码示例

演示spring.config.import属性来指定要加载哪些额外的配置文件

spring.config.import是在application.yml 配置文件中使用,项目启动的时候就会自动去加载这个application.yml配置文件,然后这个类才能通过@Value注解获取到对应的自定义配置文件中的属性值。
18、springboot默认的配置文件及导入额外配置文件_第1张图片

演示用@PropertySource注解来加载自定义的配置文件。这个注解只能用来加载properties的文件。

这个注解是加载启动类上面的。
18、springboot默认的配置文件及导入额外配置文件_第2张图片

你可能感兴趣的:(springboot,spring,boot,后端,java)