【原創】Spring-Cloud架構入門(五)config與配置文件管理--轉載請註明出處

一、SpringCloud-Config

SpringCloud-Config是用於對服務配置的集中化遠程管理的工具,支持配置文件存儲在git或者svn中,可以根據文件夾或者不同分支來獲取不同的配置文件。配合 .sh 腳本啓動服務,可以做到針對不同環境,配置進行進行快速切換。

SpringCloud的config,在使用git的情況下,可以使用如下的方式進行配置:

server的bootstarp.yml配置:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/zhouzhongzhi/properties.git
          search-paths: config
server:
  port: 8099

client的bootstarp.yml配置:

spring:
  application:
    name: customer
  cloud:
    config:
      uri: "http://localhost:8099"
      profile: "default"
      label: "dev"

在上方的配置中,我們首先在server端配置了git的地址(因爲訪問不需要密碼,所以沒有設置賬號密碼),然後指定該地址下的config文件夾,就不再需要多餘配置了。

之後,在client的配置中,我們配置了uri,這個地址就是config服務的地址。如果不想配置config的uri,配置eureka的uri也是可以的,config會自動去eureka中獲取註冊的config服務,但是這裏更推薦配置config服務的地址。

profile與label兩個配置項中,profile爲git上的配置文件的後綴,label爲訪問的git分支。例如我麼的service-name爲 customer,那麼,我們訪問的就是 https://gitee.com/zhouzhongzhi/properties.git 這個git倉庫下的config文件中的 application.yml、customer.yml、customer-default.yml三個配置文件的內容(在三個文件具有相同配置項的情況下,後面的配置項會覆蓋前面的)。

配置文件的結構如下:

二、配合啓動參數進行環境的切換

這裏,首先貼上一個main方法代碼:

    public static void main(String args[]){
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

我們在main方法中,都有一個args[]的字符串數組,這個字符串,在我們正常啓動的情況下,都是一個空字符串數組,裏面沒有任何內容,但是如果在啓動時,添加新的參數,這個args[]就不會再爲空,例如使用下方設置啓動服務時,args[]就會存在兩個String對象,分別爲--PROFILE=dev --LABEL=dev。之後,這個args[]會被傳入到Spring容器中,我們就可以使用啓動參數來對項目的信息進行修改。

利用這一點,我們就可以對client端的bootstarp.yml進行改造:

spring:
  application:
    name: customer
  cloud:
    config:
      uri: "http://localhost:8099"
      profile: ${PROFILE:default}
      label: ${LABEL:dev}

我們在啓動時,傳入不同的參數,就可以對這個這個服務的配置文件進行環境切換,而不用對代碼層面,XML文件層面的工程內的東西進行修改。

三、sh文件啓動服務

下方的代碼就是我做的一個在docker環境中進行自動進行eureka服務發佈部署的腳本文件 start.sh:

#!/bin/sh
PORT=$1
PROFILE=$2
LABEL=$3

SERVER_PORT=0

if test -z ${PORT}
then
    SERVER_PORT="10100"
else
    SERVER_PORT=${PORT}
fi

SERVER_NAME="eureka-server"

CONTAINER_NAME=${SERVER_NAME}-${SERVER_PORT}
echo ${CONTAINER_NAME}

echo "執行腳本"
git pull
mvn clean
echo "刪除舊版jar包"
rm -rf target/

echo "重新打包"
mvn -U clean compile package -Dmaven.test.skip=true

echo "停止舊版服務"
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}

echo "刪除舊版鏡像"
docker rmi ${SERVER_NAME}

echo "部署新版本鏡像"
docker build -t ${SERVER_NAME} -f script/Dockerfile  .

echo "啓動新服務"
docker run -ti -d --net host --name ${CONTAINER_NAME} --publish ${SERVER_PORT}:${SERVER_PORT}\
    --env SERVER_PORT=${SERVER_PORT} PROFILE=${PROFILE} LABEL=${LABEL}

echo "打印服務日誌"
docker logs -f ${CONTAINER_NAME}


接下來是Dockerfile

FROM java:8

COPY . /data

VOLUME /data/logs

WORKDIR /data

ENV SERVER_PORT=10100

CMD exec java -jar target/eureka.jar --PORT=${SERVER_PORT} --PROFILE=${PROFILE} --LABEL=${LABEL}

在有了上方的配置後,我們進行發佈時,只需要使用下方命令,即可進行快速的發佈部署,在需要切換環境的情況下,主需要進行切換sh文件參數即可。

sh shart.sh 8080 dev dev 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章