配置文件占位符
随机数
${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.int[1024,65536]}
占位符获取之前配置的值,如果没有可以是用:指定默认值
# 配置person的值 person.last-name=Keafmd${random.uuid} #person.last-name=张三 #person.age=${random.int} person.age=18 person.boss=false person.birthday=2022/02/02 person.maps.k1=v1 person.maps.k2=v2 person.lists=a,b,c #person.dog.name=${person.last-name}的二狗 person.dog.name=${person.hello:hello}的二狗 #person.dog.name=二狗 person.dog.age=3
Profile
多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置
yml支持多文档块方式
server: port: 8081 spring: profiles: active: dev #指定属于哪个环境 --- server: port: 8083 spring: config: activate: on-profile: dev --- server: port: 8084 spring: profiles: prod #不推荐的写法 ---
激活指定profile
在配置文件中指定 spring.profiles.active=dev
application.properties:
server.port=8081 spring.profiles.active=dev
命令行
1、可以在这里配置
2、也可以直接在测试的时候,配置传入命令行参数
打包后运行jar包时,输入下面的命令:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
虚拟机参数
-Dspring.profiles.active=dev
配置文件加载位置
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置
SpringBoot会从这四个位置全部加载主配置文件,并且互补配置
例子:
我们创建个HelloController:
package com.keafmd.springboot.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Keafmd * * @ClassName: HelloController * @Description: * @author: 牛哄哄的柯南 * @date: 2021-02-23 17:07 */ @RestController public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello"; } }
这是上面优先级第四的配置文件内容:
server.port=8081 # 配置项目的访问路径 server.servlet.context-path=/boot02
这是上面优先级第一的配置文件内容:
server.port=8084
最后我们启动程序。
运行结果:
我们还可以通过spring.config.location来改变默认的配置文件位置
我们先在F盘放一个配置文件,在这个配置文件把端口改为8085:
server.port=8085
测试一下:
说明这样是不起作用的。
我们先将项目打包,生成jar包。
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置。
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.additional-location=F:/application.properties
打开便捷的控制台:
输入:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.additional-location=F:/application.properties,然后回车:
我们就可以发现,是启动的8085端口,证明启用的F盘的配置文件。
外部配置加载顺序
SpringBoot也可以从以下位置加载配置,优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
1. 命令行参数
所有的配置都可以在命令行上进行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.servlet.context-path=/abc
1
多个配置用空格分开, --配置项=值
运行结果:
2. 来自java:comp/env的JNDI属性
3. Java系统属性(System.getProperties())
4. 操作系统环境变量
5. RandomValuePropertySource配置的random. * 属性值
由jar包外向jar包内进行寻找,优先加载带profile
6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
再来加载不带profile
8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10. @Configuration注解类上的@PropertySource
11. 通过SpringApplication.setDefaultProperties指定的默认属性
所有支持的配置加载来源:参考官方文档