SpringBoot学习笔记(八)——外部配置及其优先级

现在我们用最原始的方式来进行属性绑定。

将service类的代码修改如下:

@Component
@ConfigurationProperties
public class UserService {
    private String password;
    public String test() {
        return password;
   }
    // setter getter
}

我们有五种方法来设置属性的值。

方法一:

application.properties中配置
password=in_properties

方法二:

删掉application.properties⽂件,新建application.yml
password:in_yml
如果同时存在application.properties和application.yml,application.properties的优先级更⾼.

方法三:

假如在JVM环境变量中配置,如果是通过java命令运⾏,就是-Dpassword=zhouyu123456jvm
最后password取到的值为JVM环境变量中的值。
我们在操作系统的环境变量中设置,设置完IDEA重启才能⽣效。

方法四:

操作系统环境变量中配置:

最后结果仍然是JVM环境变量中的值,那如果把JVM中的环境变量中配置的删除掉,就能获取掉操作系
统环境变量中所配置的值了
所以,JVM环境变量优先级 > 操作系统环境变量 > application.properties > application.yml

方法五:

还可以通过命令⾏参数来设置值:
相当于:java -jar ZhouyuSpringBoot-Teacher-1.0-SNAPSHOT.jar --password=1111
这种⽅式的优先级⾼于JVM环境变量优先级
所以
命令⾏参数 > VM环境变量优先级 > 操作系统环境变量 > application.properties > application.yml

其它方式优先级

除了这⼏种配置参数之外,还有很多其他⽅式,优先级从低到⾼为:
1. SpringBoot默认值,通过SpringApplication.setDefaultProperties所设置的
2. 在@Configuration配置类上通过@PropertySource注解引⼊的properties⽂件,注意在Spring容器
刷新之前这种配置是不会⽣效的,所以通过这种⽅式所配置的loggin.*,spring.main.*的配置项在
容器启动过程中是不会⽣效的。
3. Config data
a. 同⼀个Jar包内的application.properties和YAML
b. 同⼀个Jar包内的application-{profile}.properties and YAML
c. jar包外的application.properties and YAML
d. jar包外的application-{profile}.properties and YAML
4. 操作系统环境变量
5. JVM环境变量
6. ServletContext初始化参数
7. ServletConfig初始化参数
8. 嵌⼊在环境变量中的⾏内JSON,⽐如-
Dspring.application.json='{"password":"zhouyu123456json"}'
9. 命令⾏参数
10. 测试环境
11. Devtools全局设置

对配置文件的查找

对于application.properties and application.yaml⽂件,Spring Boot会(优先级从低到⾼):
1. 先从classpath下找
  a. classpath根⽬录
  b. classpath下的config⽬录
2. 应⽤启动时的当前⽬录
  a. 当前⽬录
  b. 当前⽬录下的/config⼦⽬录
  c. /config⼦⽬录下的⼦⽬录(这个⼦⽬录名字随便叫,只要⾥⾯有application.properties andapplication.yaml⽂件就可以)
默认会找名字叫做application的⽂件,我们可以通过--spring.config.name=myproject换⼀个名字
 
 
posted @ 2022-09-14 15:53  一直学习的程序小白  阅读(316)  评论(0编辑  收藏  举报