application.properties
Spring Boot的默认配置文件在 src/main/resources/application.properties。
如要自定义web模块的端口号,可以使用:
server.port=8888
也可以通过 spring.application.name=hello
来指定应用名称。
YAML
Spring Boot也支持使用YAML文件。示例:
environments:
dev:
url:http://dev.test.com
name:Developer Setup
prod:
url:http://prod.test.com
name:Prod Setup
另外可以在单个spring.profiles里来定义多个不同的环境配置 。
自定义参数
在application.properties里自定义参数:
myparam.name=myname
可以参应用程序里通过@Value注解来加载这些自定义的参数,如:
@Component
public class myclass{
@Value("${myparam.name}")
private String name;
... 省略getter 和 setter
${…}是PlaceHolder方式,也支持SpEL表达式,格式为:#{…},大括号内为SpEL表达式。
参数引用
配置文件里的参数可以互相引用,如:
myparam.name=myname
myparam.fullname=${myparam.name} Xie.
使用随机数
Spring Boot的属性配置文件中,可以通过使用${random}配置来产生随机的int、float或String
# 随机字符串
myvalue=${random.value}
# 随机int
myint =${random.int}
# 随机long
mylong =${random.long}
# 10 以内的随机数
my10 =${random.int(10)}
# 10~20的随机数
my1020 =${random.int[10,20]}
命令行参数
可以在执行启动命令时,指定参数值,如:
java -jar xxx.jar --server.port = 8888
其中两个减号用来给application.properties中的属性值赋值。
多环境配置
Spring Boot里,多环境配置的文件名需要满足application-{profile}.properties格式,其中{profile}对应环境标识,如:
- application-dev.properties:开发环境
- application.test.properties:测试环境
- application.prod.properties:生产环境
具体哪个被加载,要在application.properteis文件中通过spring.profile.active属性来设置。
加载顺序
Spring Boot使用了下面这种属性加载顺序:
- 命令行中传入的参数
- SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。
- java:comp/env中的JNDI属性。
- Java的系统属性,可以通过System.getProperties()获得的内容。
- 操作系统的环境变量。
- 通过random.*配置的随机属性。
- 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件。
- 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件。
- 位于当前应用jar包之外的application.properties和YAML配置内容。
- 位于当前应用jar包之内的application.properties和YAML配置内容。
- 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性。
- 应用默认属性,使用SpringApplication.setDefaultProperties定义的内容。
优先级按上同的顺序从高到低,数字越小优先级越高。
本文学习资源来自《Spring Cloud微服务实战》中国工信出版集团 翟永超著