回覆列表
  • 1 # 會點程式碼的大叔

    針對這個問題我提幾種方案,因為不同的專案的背景不同,也別上來就上統一配置中心,還是針對實際情況,選擇不同的方案。

    不同程式碼基線,使用不同配置檔案

    正常情況,我們的程式碼基線會有多條,比如最簡單的開發基線和生產基線,開發人員在開發基線上進行程式碼開發,配置檔案中的內容對應的是開發環境;同理,生產基線中的配置檔案對應的是生產環境;

    可以看出來,不同基線,程式碼是一致的(或者說會最終一致),但是配置檔案是不同的;如果配置檔案需要修改的話,就不能透過merge的方式進行程式碼合併了。

    Spring Boot中配置不同環境的配置檔案

    我們現在的專案都是基於Spring Boot,不同的配置檔案,比如資料來源的配置、遠端介面地址、日誌列印等,Spring Boot是支援透過不同的profile來配置不同環境的配置。大概的配置就是:

    根據不同的環境,設定不同的yml檔案,命名:application-xxx.yml

    設定spring.profiles.active的值,可以在打包的時候指定。

    多個基線的程式碼可以是完全一樣。

    Spring Boot專案在啟動時指定配置

    這個拿一個實際專案舉例,是我們專案的做法,實現思路可能會有些怪異。我簡單說一下:

    程式有兩個定時任務,分別是:job1和job2;

    job1中的程式碼:if(job1run==true){邏輯處理},job2類似;job1run和job2run預設false;

    專案正常打包,不需要做額外處理,得到:project.jar

    機器1執行:java -jar project.jar --job1run=true

    機器2執行:java -jar project.jar --job2run=true

    過程有些怪異,可以實現同一個程式碼包,再執行的時候指定它做什麼工作。

    寫在資料庫中

    其實我是不排斥這種做法的,但是要注意:

    有可能會發生變化的配置,放在資料庫中;

    懶載入的方式讀取到記憶體中,不要每次使用的時候讀一次資料庫;

    根據實際場景,決定載入到記憶體中的配置是否需要定時失效/過載。

    統一配置中心

    隨著專案功能的增多:配置會越來越多,修改配置後實時生效的要求也會越來越高,所以很多公司會採用搭建【統一配置中心】的方式來解決這個問題。

    配置中心的核心功能就是【配置】,但肯定不侷限於此,另外還需要有:審批、灰度釋出、回滾等功能;

    常用的開源配置中心有:spring-cloud-config、Apollo、Nacos;

  • 中秋節和大豐收的關聯?
  • 特朗普能從商人到總統,是因為出生在富裕家庭,還是因為他一直都很努力?