1.概要
spring boot不仅可以从工程的resource文件夹或者config文件夹下加载配置,还可以在以下位置加载配置:
- 命令行参数
- 来自java:comp/env的JNDI属性
- Java系统属性(System.getProperties())
- 操作系统环境变量
- RandomValuePropertyResource配置的random.*属性值
- jar包外部的application-{profile}.properties或application.yaml(带spring.profile)配置文件
- jar包内部的application-{profile}.properties或application.yaml(带spring.profile)配置文件
- jar包外部的application.properties或application.yaml(不带spring.profile)配置文件
- jar包内部的application.properties或application.yaml(不带spring.profile)配置文件
- @Configuration注解类上的@PropertySource
- 通过SpringApplication.setDefaultProperties指定的默认属性
其中上述中的标红部分是我们需要重点掌握内容,从上向下优先级越来越低,高优先级的配置会覆盖低优先级的配置,高优先级的配置和低优先级的配置都会生效,形成互补配置;
2.示例
2.1命令行参数
以修改启动端口号为例,我们启动jar的同时可以指定启动的端口号为9909
此时我们访问:
如果想在启动的时候修改多个配置,中间用空格间隔即可,比如我们在修改端口的同时还想添加一个路径,就执行下面的这个命令:
java -jar spingboot01-1.0-SNAPSHOT.jar --server.port=9909 --server.servlet.context-path=/boot
其中:--server.port=9909用来修改端口号
--server.servlet.context-path=/boot增加访问路径为/boot,此时我们想要执行结果如下:
2.2jar包外和jar包内
记住加载原则:由 jar 包外向 jar 包内进行寻找,优先加载带 profile 的文件,在加载不带 profile 的文件;
举例:比如我们此时想修改多个加载参数,我们可以单拉出一个配置文件放在和 jar 包的同级目录下:
此时如果启动这个 jar 肯定端口号为8801,访问路径为 /boot。此时我们在 jar 所在的同级目录放置一个配置文件,端口号为8888,访问路径为/hai;
此时启动这个 jar
此时我们访问:http://localhost:8888/hai/hello