3个配置文件: application.properties
application-dev.properties
application-prod.properties
java
第1个: application.properties
spring
server.port=8888 spring.profiles.active=dev person.firstName=新名 person.lastName=${random.uuid} person.age=${random.int(100)} person.male=true person.birth=1985/03/03 person.maps.k1=v1 person.maps.k2=20 person.maps.k3=true person.lists=lisi,wangwu person.dog.name=${person.firstName:无名}_小d person.dog.age=${random.int[30,40]}
第2个: application-dev.properties
json
server.port=9999 person.lastName=${random.uuid} person.age=${random.int(100)} person.male=true person.birth=1985/03/03 person.maps.k1=v1 person.maps.k2=20 person.maps.k3=true person.lists=lisi,wangwu person.dog.name=${person.firstName:无名dev}_小dev #person.dog.age=${random.int[10,20]}
第3个: application-prod.properties
segmentfault
server.port=7777 person.lastName=${random.uuid} person.age=${random.int(100)} person.male=true person.birth=1985/03/03 person.maps.k1=v1 person.maps.k2=20 person.maps.k3=true person.lists=lisi,wangwu person.dog.name=${person.firstName:无名prod}_小prod person.dog.age=${random.int[20,30]}
应用启动的时候, 先去 第1个 配置文件 application.properties中找 spring.profiles.active=dev
找到 dev
这样, 就会读取application-dev.properties 的配置文件来加载; 那么问题来了:springboot
- 先加载 application.properties中的配置
- 而后加载application-dev.properties中的配置, 若是重复的, 用dev去覆盖上面的; 若是dev中没有的, application.properties中的配置就生效!
- 回答如上: 会生效, 除非dev中的覆盖了;
上面三个配置文件设置后, person对象的属性加载结果是: 可见 person.dog.age
被application.properties的起做用了;app
{"lastName":"94b68ef1-33d2-4866-9b62-32c5fb983f22","age":47,"male":true,"birth":"Mar 3, 1985 12:00:00 AM","maps":{"k1":"v1","k2":"20","k3":"true"},"lists":["lisi","wangwu"],"dog":{"name":"新名_小dev","age":32}}
spring: profiles: active: prod person: firstName: newName --- spring: profiles: dev server: port: 5555 person: lastName: ${random.uuid} # uuid age: ${random.int(100)} # 0-100的随机值 male: true birth: 1985/03/03 maps: {k1: v1, k2: 20, k3: true} lists: - lisi - wangwu dog: name: ${person.firstName:无名}_小黄dev #若是为空, 取默认值 age: ${random.int[1,3]} #10-20之间的随机值: 中间还不能有空格, 实测! --- spring: profiles: prod server: port: 6666 person: lastName: ${random.uuid} # uuid age: ${random.int(100)} # 0-100的随机值 male: true birth: 1985/03/03 maps: {k1: v1, k2: 20, k3: true} lists: - lisi - wangwu dog: name: ${person.firstName:无名}_小黄prod #若是为空, 取默认值 age: ${random.int[4,6]} #10-20之间的随机值: 中间还不能有空格, 实测!
---
能够做为文档分割符号dom
问题来了:ui
- 两个都会读取;
- application.yml先于application.properties加载; (示例证实以下)
- 因为加载有前后关系, properties的属性值会覆盖yml中的;
在上面 application.yml
的基础上, 若是application.properties
中也有配置:3d
person.firstName=新名
则最终结果是:code
{"lastName":"6d3a8f32-7736-48c8-9fb9-9fb3f73da6b7","age":36,"male":true,"birth":"Mar 3, 1985 12:00:00 AM","maps":{"k1":"v1","k2":20,"k3":true},"lists":["lisi","wangwu"],"dog":{"name":"新名_小黄prod","age":4}}
说明了上面的结论: application.properties
中的
person.firstName=新名
覆盖了 application.yml
中的 person.firstName: newName
; 同时也证实两个都会加载!
会覆盖项目中的配置:
java -jar xxx.jar -Dspring.profiles.active=prod