一、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