【原创】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 

 

 

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