配置项读取顺序

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文件:

  1. 当前目录下的/config目录
  2. 当前目录
  3. 类路径下的/config目录
  4. 类路径根目录

读取和设置配置文件属性

(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中配置各个环境不同的内容,通过命令行方式去激活不同环境的配置