首先用 SpringBoot 写一个 demo,其项目中 src 结构如下。
├─main │ ├─java │ │ └─com │ │ └─company │ │ └─demo │ │ │ DemoApplication.java │ │ │ │ │ └─controller │ │ IndexController.java │ │ │ └─resources │ │ application-dev.properties │ │ application-pro.properties │ │ application.properties │ │ │ ├─static │ └─templates └─test
IndexController.java 中的代码是:
import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController { @Value("${environment}") private String environment; @Value("${password}") private String password; @RequestMapping("/") public ResponseEntity<?> index() { return ResponseEntity.ok(environment + " " + password); } }
配置文件 application.properties 内容:
spring.profiles.active=dev
配置文件 application-dev.properties 内容:
environment=develop
password=developPassword
配置文件 application-pro.properties 内容:
environment=produce
因为 application.properties 配置了读取 profile 是 dev,所以项目启动时会读取 application-dev.properties 这个配置文件。
命令行输入 java -jar demo.jar 启动项目。
访问 http://localhost:8080,可得到结果 develop developPassword。
如何读取外部的配置文件?首先新建一个 application-external.properties 文件,其内容是:
environment=external
password=externalPassword
将文件放在 d:/tmp/ 目录下。
命令行输入 java -jar demo.jar --spring.config.location=file:d:/tmp/application-external.properties 启动项目。
可得到结果 external externalPassword,说明读取到了外部配置文件。
更优的办法:
或采用命令 java -jar demo.jar --spring.config.additional-location=file:d:/tmp/application-external.properties 这个可以将外部配置文件追加到项目中,而不是直接替换项目中的配置文件。
需要注意的是 spring.config.additional-location 只是扩展了读取配置的目录。
对于 dev pro 配置文件选择的问题,有如下两种方式,优先级由高到低:
第一种,命令行启动时,java -jar -Dspring.profiles.active=pro demo.jar
第二种,在 application.properties 中添加信息 spring.profiles.active=dev
查找配置文件的优先级是:首先在 spring.profiles.active 中设置的文件,例如是 dev,那么优先在 application-dev.properties 中查找。只有当 application-dev.properties 中某些配置项没有时才会去 application.properties 中查找。