SpringBoot加载外部配置⽂件
Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使⽤相同的代码。⽀持的外部配置源包括:Java属性⽂件、YAML⽂件、环境变量、命令⾏参数。
⽤@Value注解可以将属性值直接注⼊到beans中。命令⾏参数以 -- 开头
配置⽂件加载的顺序如下:
1. Application properties packaged inside your jar (application.properties and YAML variants)
2. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
3. Application properties outside of your packaged jar (application.properties and YAML variants)
4. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)应⽤程序启动的时候,Spring Boot 会⾃动从以下位置查并加载 application.properties 和 application.yaml ⽂件:
1. The classpath root
2. The classpath /config package
3. The current directory
4. The /config subdirectory in the current directory
5. Immediate child directories of the /config subdirectory
查顺序按优先级来,后⾯的可以覆盖前⾯的。⽂件中的每⼀项会作为PropertySources被添加到Spring Environment
spring怎么读取properties
如果你不想⽤"application"作为配置⽂件名称,可以在环境属性中通过fig.name来指定。还可以使
⽤fig.location来显式指定配置⽂件的位置(⽂件路径或⽬录⽤逗号分隔)
注意,fig.name 和 fig.location 必须定义为⼀个环境属性(通常是⼀个OS环境变量、⼀个系统属性或⼀个命令⾏参数)
如果 fig.location 指定的是⼀个⽬录,那么必须以 / 结尾
⽆论直接指定⽂件还是包含在⽬录中,配置⽂件必须在其名称中包含⽂件扩展名。通常,扩展名⽀持 .properties, .yaml, .yml
举个栗⼦
指定单个⽂件
$ java -jar myproject.jar --fig.name=myproject
指定多个位置
$ java -jar myproject.jar --fig.location=optional:classpath:/default.properties,optional:classpath:/override.properties
默认情况下,如果指定的位置不存在,则会报错。如果你不确定它是否存在,使⽤使⽤ optional: 前缀
例如:
optional:classpath:/custom-config/,optional:file:./custom-config/
Profile Specific Files
Spring Boot 会尝试加载按照命名规约 application-{profile} 的⽂件,我们把这样的⽂件称为Profile-specific⽂件。
例如,如果你激活了⼀个名称为prod的profile,并且使⽤YAML⽂件,那么 l 和 l 都会被尝试加载。
Profile-specific⽂件必须要和application.properties在相同的位置,⽽且profile-specific⽂件中的配置项会覆盖⾮profile-specific⽂件中相同的配置项。如果有多个profile-specific⽂件被激活,则后⾯会覆盖前⾯的。
举个例⼦,假设spring.profiles.active=prod,live,那么application-prod.properties中的配置项会被application-
live.properties中的同名配置项覆盖。如果没有明确指定激活哪个profile,则application-default会被考虑激活。
YAML ⽂件
考虑下⾯的配置⽂件
hello:
world: "hehe"
my:
roles:
- "admin"
- "guest"
转换成properties⽂件应该是:
hello.world=hehe
Spring Framework提供了两个⽅便的类,可以⽤来加载YAML⽂档。YamlPropertiesFactoryBean 将 YAML 作为Properties 加载,⽽ YamlMapFactoryBean 将 YAML 作为⼀个 Map 加载。
可以⽤@Value注解将属性值注⼊到bean中
@Value("${hello.world}")
private String wahaha;
@Value("${my.roles[1]}")
private String roles1;
划重点
1、⽀持四种外部配置源:Java属性⽂件、YAML⽂件、环境变量、命令⾏参数;
2、配置⽂件查位置,依次为:
  (1) classpath 根路径
  (2) classpath 根路径下config⽬录
  (3) jar包当前⽬录
  (4) jar包当前⽬录的config⽬录
  (5) /config⼦⽬录的直接⼦⽬录
3、配置⽂件加载顺序:
  (1) 当前jar包内部的application.properties和l
  (2) 当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
  (3) 引⽤的外部jar包的application.properties和l
  (2) 引⽤的外部jar包的application-{profile}.properties 和 application-{profile}.yml
4、后⾯的可以覆盖前⾯的同名配置项

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。