SpringBoot配置⽂件优先级(全)
⼀、配置⽂件优先级
山的组词1. 在执⾏命令的⽬录下建config⽂件夹,然后把配置⽂件放到这个⽂件夹下。(在jar包的同⼀个⽬录下建config⽂件夹,执⾏命令需要
在jar包所在⽬录下才⾏)
2. 直接把配置⽂件放到jar包的同级⽬录
3. 在classpath下建⼀个config⽂件夹,然后把配置⽂件放进去。读取配置文件失败>高速免费是入口还是出口时间为准
4. 在classpath下直接放配置⽂件。
5. 以上1-4优先级逐渐递减。
6. springboot默认是优先读取它本⾝同级⽬录下的⼀个config/application.properties⽂件。
韩宰硕⼆、互补读取
在不指定外部配置⽂件路径的前提下,springBoot按照上述优先级加载。
1. 如果优先级⾼的配置⽂件中没有某个配置项,则会到优先级低的配置⽂件中该配置项,即具有互补功能。
2. 需要注意的是,⽂件名相同才会互补。⽐如:
1. classpath下的application.properties会补config⽬录下的application.properties⽂件。bootsrtap同样互补。
2. 相当于最终互补完成后形成两个总⽂件:application和bootstarp。
3. ⽽bootstrap的优先级⼜⽐application⾼,所以会出现相同配置项classpath下bootstarp,⽐config下application的配置优先
级⾼。
摇曳的意思
3. 如果spring.profiles.active不指定, 默认application.properties⽂件。
4. 如果spring.profiles.active指定dev,则默认application-dev.properties⽂件。即使优先级最⾼的config⽬录存在application配
置也不会读取。
5. 如果application-dev.properties⽂件不存在(四个优先级⽬录都没有),则会按优先级application.properties⽂件。bootstrap
同。
三、指定配置⽂件路径启动程序
#通过 -fig.location指定配置⽂件路径
nohup java -fig.location=/⽬录/application.properties -jar jar包
有关长城的谚语1. 如果启动程序时指定配置⽂件路径,则程序运⾏时只读取指定的配置⽂件。指定配置⽂件不存在则报错,程序启动失败。
四、启动注⼊spring.profiles.active
1. 当启动参数设置-Dspring.profiles.active=sit后,则会按照上述优先级依次寻-sit配置⽂件并进⾏互补。
2. 若四个优先级都不存在-sit⽂件,则依次寻默认配置⽂件。
3. 注意:不论是-sit⽂件还是默认配置⽂件中,对spring.profiles.active进⾏重新赋值是⽆效的。注⼊命令中,优先级最⾼。(测试验
证是这样的)
五、总结
以上规则都是⽹上搜寻,并⾃⾏测试验证的结论。
1. springBoot默认读取bootstrap和application配置⽂件,且前者优先级更⾼。
2. 读取顺序见第⼀节介绍,两个⽂件相当于两个分⽀,互补读取,类似最终各⾃汇总为⼀个⽂件。且其中重复参数bootstrap优先级更
⾼。
3. bootstrap中指定spring.profiles.active=sit,则会相应读取application-sit配置⽂件。
4. 指定sit,但不到相应配置⽂件,则默认配置⽂件。application和bootstrap互不影响。
例如:指定sit,四个优先级⽬录存在application-sit,不存在bootstrap-sit。则使⽤application-sit内的
参数,和默认(四个优先级⽬录寻)的bootstrap内的参数。
5. 启动参数设定了spring.profiles.active。其余配置中存在,不会对其进⾏覆盖。