Spring Boot: 配置文件詳解


SpringBoot是為了簡化Spring應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程。

一、准備前提

為了讓SpringBoot更好的生成數據,我們需要添加如下依賴(該依賴可以不添加,但是在 IDEA 不會有屬性提示),該依賴只會在編譯時調用,所以不用擔心會對生產造成影響…

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

二、自定義屬性配置

SpringBoot 主配置文件默認為application.yml或者application.properties,我更喜歡用前者,所以文章中基本以第一種為例讀取自定義屬性

2.1 application.yml 自定義屬性

server:
  port: 8081

original:
  config:
    title: OriginalConfig
    description: 主配置文件中屬性

2.2 新建OriginalConfig配置類

該配置類用來映射我們在application.yml中的內容,這樣一來我們就可以通過操作對象的方式來獲得配置文件的內容了。

@Data
@Component
public class OriginalConfig {
    /**
     * 注入 application.yml 配置
     *
     */
    @Value("${original.config.title}")
    private String title;

    @Value("${original.config.description}")
    private String description;
    
}

這里,可以采用@ConfigurationProperties簡化@Value注入值的寫法,詳見文末Github源碼寫法。

2.3 ConfigTest.java測試

2.3.1 測試方法testOriginalConfig

	@Autowired
    OriginalConfig originalConfig;

    /**
     * 讀取自定義屬性
     */
    @Test
    public void testOriginalConfig() {
        System.out.println("開始讀取 application.yml 的自定義屬性:");
        System.out.println("讀取配置信息:");
        System.out.println("title: " + originalConfig.getTitle());
        System.out.println("desc: " + originalConfig.getDescription());
        System.out.println("application.yml 文件的屬性讀取完畢!");
    }

2.3.2 控制台打印如下:

開始讀取 application.yml 的自定義屬性:
讀取配置信息:
title: OriginalConfig
desc: 主配置文件中屬性
application.yml 文件的屬性讀取完畢!

三、自定義文件配置

3.1 定義一個名為myConfig.properties的自定義文件

自定義配置文件的命名不強制application開頭

customize.config.title=CustomizeConfig
customize.config.description=自定義配置文件中屬性

3.2 新建CustomizeConfig配置類

該配置類用來映射我們在myConfig.properties中的內容,這樣一來我們就可以通過操作對象的方式來獲得配置文件的內容了。

@Data
@Component
@PropertySource(value = "classpath:myConfig.properties", encoding = "utf-8")
public class CustomizeConfig {
    /**
     * 注入 myConfig.properties 配置
     *
     */
    @Value("${customize.config.title}")
    private String title;

    @Value("${customize.config.description}")
    private String description;
}
  • @PropertySource :配置文件路徑和編碼格式

2.3 單元測試

	@Autowired
    CustomizeConfig customizeConfig;

    /**
     * 從 myConfig.properties 獲取配置
     */
    @Test
    public void testCustomizeConfig() {
        System.out.println("開始讀取 myConfig.properties 文件的屬性:");
        System.out.println("title: " + customizeConfig.getTitle());
        System.out.println("desc: " + customizeConfig.getDescription());
        System.out.println("myConfig.properties 文件的屬性讀取完畢!");
    }
  • 控制台打印如下:
開始讀取 myConfig.properties 文件的屬性:
title: CustomizeConfig
desc: 自定義配置文件中屬性
myConfig.properties 文件的屬性讀取完畢!

三、多環境化配置

真實的應用中,常常會有多個環境(如:本地,開發,測試,正式),不同的環境數據庫連接都不一樣,這個時候就需要用到spring.profile.active,它的格式為application-{profile}.yml,這里的application為前綴不能改,{profile}是我們自己定義的。

3.1 指定不同環境的路徑

通過server.servlet.context-path將不同環境指定不同的路徑。

  • application-local.yml
title: local配置文件
server:
  servlet:
    context-path: /local
  • application-daily.yml
title: daily配置文件
server:
  servlet:
    context-path: /daily
  • application-gray.yml
title: gray配置文件
server:
  servlet:
    context-path: /gray
  • application-production.yml
title: production配置文件
server:
  servlet:
    context-path: /production

3.2 新增配置類EnvConfig.java

@Data
@Configuration
public class EnvConfig {

    @Value("${title}")
    private String title;
}

3.3 測試方法

	@Autowired
    EnvConfig envConfig;

    /**
     * 從 不同環境配置讀取
     */
    @Test
    public void testEnvConfig() {
        System.out.println("開始讀取 不同環境 文件的屬性:");
        System.out.println("title: " + envConfig.getTitle());
        System.out.println("myConfig.properties 文件的屬性讀取完畢!");
    }

3.4 激活某個環境配置

application.yml配置文件中指定環境,例如指定gray環境:

spring:
  profiles:
    active: daily
  • 控制台打印如下:
開始讀取 不同環境 文件的屬性:
title: gray配置文件
myConfig.properties 文件的屬性讀取完畢!

這里指定不同的環境配置文件,即可訪問到不同環境的配置。

四、源碼地址

https://github.com/vanDusty/SpringBoot-Home/tree/master/springboot-demo-list/springboot-demo-config


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM