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注解获取到对应的自定义配置文件中的属性值。
演示用@PropertySource注解来加载自定义的配置文件。这个注解只能用来加载properties的文件。
这个注解是加载启动类上面的。