配置项读取顺序
1.根目录下的开发工具全局设置属性(当开发工具激活时为~/.spring-boot-devtools.properties)
2.测试中的@TestPropertySource注解
3.测试中的@SpringBootTest#properties注解特性
4.命令行参数
5.SPRING_APPLICATION_JSON中的属性(环境变量或系统属性中的内联JSON嵌入)
6.ServletConfig初始化参数
7.ServletContext初始化参数
8.java:comp/env里的JNDI属性
9.JVM系统属性
10.操作系统环境变量
11.随机生成的带random.* 前缀的属性(在设置其他属性时,可以应用他们,比如${random.long})
12.应用程序以外的application.properties或者appliaction.yml文件
13.打包在应用程序内的application.properties或者appliaction.yml文件
14.通过@PropertySource标注的属性源
15.默认属性(通过SpringApplication.setDefaultProperties指定).
Spring Boot 查找application.properties位置
Spring Boot 允许你自定义一个application.properties文件,然后放在特定位置,来重写spring Boot的环境变量。
Spring Boot 默认从4个位置查找application.properties文件:
- 当前目录下的/config目录
- 当前目录
- 类路径下的/config目录
- 类路径根目录
读取和设置配置文件属性
(1)通过命令行来重写和配置环境变量,这种方式优先级最高。
java -jar demo.jar – server.port = 8500
上面的命令就是将内嵌的tomcat的服务端口改成8500,有点需要注意的:=两边不要有空格(可以用json格式字串符来设置多变量)
(2)通过@value来获取
(3)通过Environment接口来获取,只需要吧接口住进去即可
(4)可以利用${…}在application.properties引用变量
myapp.name=spring
myapp.desc=${myapp.name} nice
(5)可以在application.properties配置随机变量,利用的是RandomValuePropertySource类
my.secret=random.valuemy.number={random.int}
my.bignumber=random.longmy.number.less.than.ten={random.int(10)}
(6)绑定属性值到Bean
多环境配置
在开发过程中一般是测试环境,但是到了发布的时候就是生产环境,按照传统的Spring框架,需要修改配置文件,对数据库地址、服务器端口等一系列配置都要进行修改,这是一个非常繁琐而且容易发生错误的事。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
- application-dev.properties – 开发环境
- application-test.properties – 测试环境
- application-prod.properties – 生产环境
至于哪个具体的配置文件会被加载,需要在application.properties 文件中通过spring.profiles.active 属性来设置,其值对应{profile}值。
例如:spring.profiles.active = test 就会加载 application-test.properties配置文件内容。
接着以开发、测试、生产三个配置文件同时存在为例,说明一下情况:
(1)创建三个文件分别为:application-dev.properties、application-test.properties、application-prod.properties
(2)填写内容,用server.port属性来区别各个环境,dev的端口为:8080,test的端口为:8090,prod的端口为:9090
(3)application.properties中设置spring.profiles.active = dev ,以开发环境为准。
(4)通过命令行激活不同的环境:
- 执行 java -jar demo.jar ,可以观察到服务器的端口为8080,也就是默认的开发环境
- 执行 java -jar demo.jar –spring.profiles.active=test,就可看到服务端口为8090,也就是测试环境 执行
- java -jar demo.jar–spring.profiles.active=prod,就可看到服务端口为9090,也就是生成环境
总结多环境的配置思路:
- application.properties 中配置通用内容,并设置spring.profiles.active = dev,以开发环境为默认配置
- application-{profile}.properties中配置各个环境不同的内容,通过命令行方式去激活不同环境的配置