Spring Boot:项目启动时读取不同的配置文件

首先用 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 中查找。 

 
原文地址:https://www.cnblogs.com/colin220/p/11168755.html