spring boot的默认配置文件在src/main/resources/appliaction.properties
. 可以在application.properties
中添加server.port= 8088
spring.application.name=serviceName来指定端口号与服务名.
spring boot的配置文件除了传统的properties
文件外,还支持广泛推荐的YAML
文件.YAML采用的配置格式不像properties那样以单纯的键值对的形式,而是以类似的大纲缩进的形式.
# YAML配置用例
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: my cool app
# 等价的properties配置
environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=my cool app
YAML的配置方式,器结构更加清晰易读,同时配置的字符量也得到显著的减少.除此之外,YAML还可以在单个文件中通过使用spring.properties属性来定义多个不同环境的配置.
在Test环境时,server.port将使用8882端口,而在prod环境中,server.port将使用8883端口,如果没server.port将使用8881端口.
server:
port:8881
---
spring:
profiles: test
server:
port: 8882
---
spring:
profiles: prod
server:
port: 8883
自定义参数
除了可以在spring boot的配置文件中设置各个Starter模块中预定义的配置属性,也可以在配置文件中定义属性.比如在application.properties
中添加:
book.name=SpringCloudApplication
book.author=aaa
# 然后使用@Value注解来加载这些自定义的参数
@Component
public class Book {
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
}
@Value注解加载属性值的时候可以支持两种表达式进行配置
${...}
,大括号中为placeholder.#{...}
,大括号内为SqEL表达式.参数引用
在application.properties中的各个参数之间可以直接通过placeholder的方式进行应用.
book.name=SpringCloud
book.author=wjh
book.desc=${book.author} is write ${book.name}
book.desc参数引用了上文中的定义,最后属性值为wjh is write SpringCloud.
使用随机数
在一些特殊情况下,我们希望有些参数每次加载的时候不是一个固定的值,比如秘钥,服务端口等.在spring boot的属性配置文件中,可以通过**${random}配置来产生随机的int,long或者String字符串**.
# ${random}配置方式参考
# 随机字符串
com.didispace.blog.value=${random.value}
# 随机int
com.didispace.blog.number=${random.int}
# 随机long
com.didispace.blog.bignumber=${random.long}
# 10以内的随机数
com.didispace.blog.test1=${random.int(10)}
# 10~20的随机数
com.didispace.blog.test2=${random.int(10.20)}
命令行参数
可以使用java -jar
来启动spring boot应用时,还可以在命令行中指定的参数,比如java -jar xxx.jar --server.port=8888
,直接以命令行的方式设置server.port属性,并将端口号设为8888.
在用命令行方式启动Spring Boot应用时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识.所以,java -jar xxx.jar --server.port=8888命令,等价于在application.properties
中添加server.port=8888. 通过命令行来修改属性值是spring boot非常重要的一个特性.
多环境配置
在spring boot中,多环境配置文件名需要满足application-{profile},profile
的格式,其中{profile}
对应的为环境标识.
例如:
具体配置文件的加载:==需要在application.properties文件中通过spring.profile.active属性来设置,其值对应配置文件中{profile}的值
==,如果配置spring.profile.active=test就会加载application-test.properties配置文件的内容.
以不同环境配置不同的服务端口为例:
java -jar xxx.jar
,可以观察到服务端口被设置为1111,也就是默认的dev环境.java -jar xxx.jar --spring.profile.active=test
,可以观察到服务器端口被设置为2222,也就是测试环境. - 执行java -jar xxx.jar --spring.profile.active=prod
,可以观察到服务器端口被设置为3333,也就是生产环境.加载顺序
为了能够更合理的重写各属性的值,spring boot使用了下面这种较为特别的属性加载顺序: