Google Code Prettify

2018年6月3日 星期日

application.properties@spring boot

spring boot 預設會讀取 classpath 下的 application.properties,但是,大部份的維運團隊通常會同時面對一個系統要部署到開發、測試、正式等多個環境的問題,為解決這個問題,spring boot 有了以下的預設。
  • application.properties
  • spring.profiles.active=test
    
    util.count=0
    util.total=4
    
    紅色部份可以用來設定環境,在這裡,我假定會有 dev、test、prod 三個環境,application.properties 放的是所有環境都會用到的設定,dev、test、prod 這三個各別的環境如果有什麼特殊的設定,則可以在 application-dev.properties、application-test.properties、application-prod.properties 這三個設定檔分別設定。萬一,這三個設定檔裡的設定是 application.properties 已經有的,則會覆蓋預設的設定。假設,另三個設定檔的內容如下。
  • application-dev.properties
  • util.count=1
  • application-test.properties
  • util.count=2
    
  • application-prod.properties
  • util.count=3
在上述的設定下,因為 spring.profiles.active 設定為 test,spring boot 載入的設定會如下:
util.count=2
util.total=4
寫個程式測試看看 …
  • ForTestUtil (單純的載入兩個設定參數並提供印出的 method)
  • import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ForTestUtil {
        @Value("${util.count}")
        private Long count;
     
        @Value("${util.total}")
        private Long total;
     
        public void print() {
            System.out.println("count = " + count);
            System.out.println("total = " + total);
        }
    }
  • ForTestUtilTest (上述類別的單元測試程式)
  • import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import idv.steven.demo2.Demo2Application;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Demo2Application.class)
    public class ForTestUtilTest {
        @Autowired
        private ForTestUtil util;
    
        @Test
        public void test() {
            util.print();
        }
    }
執行結果,會如下:
count = 2
total = 4

沒有留言:

張貼留言