Spring Boot Profiles

為不同的環境設定配置檔案

來看專案結構圖:
這裡寫圖片描述
application.yml:

spring:
  profiles:
    active: dev    # 啟用特定環境的profile配置
#    include: usage_message

執行專案以後,會啟用application-dev.yml的配置項(雜七雜八的配置:MySQL、Redis、RabbitMQ)。同理,spring.profiles.active=prod則會啟用application-prod.yml的配置。

使用profiles載入不同的類

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Profile({"tut1", "hello-world"})  // 可以使用tut1或hello-world啟用配置
@Configuration
public class Tut1Config {
    @Bean
    public Queue hello() {
        return new Queue("hello");
    }

    @Profile("receiver")
    @Bean
    public Tut1Receiver receiver() {
        return new Tut1Receiver();
    }

    @Profile("sender")
    @Bean
    public Tut1Sender sender() {
        return new Tut1Sender();
    }
}

為了針對不同的情況載入不同的類,看上面的程式碼,比如我要啟用hello-word Configuration和Tut1Sender類,可以這樣:

# 執行spring boot 傳送mq訊息 
java -jar wechat-shop-admin-app/build/libs/wechat-shop-admin-app-1.0.0-SNAPSHOT.jar --spring.profiles.active=hello-world,sender,dev   

--spring.profiles.active=hello-world,sender,dev,這裡我加上了dev選項,因為--spring.profiles.active選項會覆蓋application.yml中的spring.profiles.active。通過java -jar去啟動,如果指定--spring.profiles.active=hello-world,sender,不加dev的話,application-dev.yml中的配置就不會生效,不信你去試試。

另外profiles這個單詞一定要寫對,我就寫成了profile(少了個s),導致配置不生效,折騰了好久,想哭。

#執行spring boot 接收mq訊息 
java -jar wechat-shop-admin-app/build/libs/wechat-shop-admin-app-1.0.0-SNAPSHOT.jar --spring.profiles.active=hello-world,receiver,dev

當特定的profile不存在時,指定預設的方式

    @Profile("!usage_message")
    @Bean
    public CommandLineRunner tutorial() {
        return new RabbitAmqpTutorialsRunner();
    }

usage_message 這個profile不存在時,使用@Profile("!usage_message")來指定預設的情況。