博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Config分布式配置
阅读量:6298 次
发布时间:2019-06-22

本文共 5872 字,大约阅读时间需要 19 分钟。

hot3.png

    下午抽空看了下Spring Cloud Config搭建配置中心,过程中有点坑,不过总算过来了,和大家分享一下。

    了解Spring Boot+Spring Cloud的微服务框架的都应该知道,它的出现不是为了单个的服务,而是为了更多的服务而产生的,也正是这种需求,在开发中,服务配置的管理尤为重要,毕竟这是可以不断累加的,越来越多的服务配置需要管理,一着不慎,就可能出现很多错误,而且也不方便,这也是我们所不想看到的。在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件:Spring Cloud Config。

    Spring Cloud Config组件支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client,下面我来说下配置在远程Git仓库的实现。

    开发环境:Windows

    开发工具:Eclipse_oxygen(不必统一,IDEA更好),Maven

    1、构建Config Server

    创建Maven项目,名为EurekaConfigServer,几个配置文件如下:

    pom.xml配置:

4.0.0
EurekaConfigServer
EurekaConfigServer
0.0.1-SNAPSHOT
EurekaConfigServer
Demo For EurekaConfigServer
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR4
pom
import
org.springframework.boot
spring-boot-maven-plugin

    这里要注意几点,不然后面运行会有问题。首先添加必要的依赖项:

org.springframework.cloud
spring-cloud-config-server

    然后注意dependencyManagement中version的版本和parent中version版本,如果是其他的版本,在运行程序时可能会报错,当然这不是唯一的,就像我之前parent的版本是1.4.7就出错了,改成1.5.4就好了,这是在运行http://localhost:8888/config-client/dev时报错的,错误如下:org/springframework/boot/autoconfigure/context/PropertyPlaceholderAutoConfiguration,后来查看了对应的jar包才发现原来的版本里没有这个类,所以换成有这个类的版本就好了(祝脱坑)。

    application.properties配置:

spring.application.name=config-serverserver.port=8888#eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/#配置git仓库地址spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/#配置仓库路径spring.cloud.config.server.git.searchPaths=respo#配置仓库的分支spring.cloud.config.label=master#访问git仓库的用户名(公共仓库可不填)#spring.cloud.config.server.git.username=#访问git仓库的用户密码(公共仓库可不填)#spring.cloud.config.server.git.password=

    这里的公共仓库里已新建了一个配置文件:config-client-dev.properties,主要是为了读取里面的属性。

http请求地址和资源文件映射如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

    Application.java代码:

@SpringBootApplication@EnableConfigServer   //开启配置服务器功能 public class ConfigServerApplication{   public static void main(String[] args){     SpringApplication.run(ConfigServerApplication.class,args);   }}

     运行Application,访问http://localhost:8888/config-client-dev.properties,可得到如下配置:

democonfigclient.message: hello spring iofoo: foo version 2

    这是git仓库中新建的配置文件里的属性,当然也可以这样访问http://localhost:8888/config-client/dev,结果如下:

{"name":"config-client","profiles":["dev"],"label":null,"version":"a68876a6211369bae723348d5f8c3defe4a55e04","state":null,"propertySources":[{"name":"https://github.com/forezp/SpringcloudConfig/respo/config-client-dev.properties","source":{"democonfigclient.message":"hello spring io","foo":"foo version 2"}}]}

    2、构建config client

    同理,创建Maven项目,名为EurekaConfigClient,几个配置文件如下:

    pom.xml配置:

4.0.0
EurekaConfigClient
EurekaConfigClient
0.0.1-SNAPSHOT
EurekaConfigClient
Demo For EurekaConfigClient
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR4
pom
import
org.springframework.boot
spring-boot-maven-plugin

    这里注意一下和config server配置里的不同。

    application.properties配置:

spring.application.name=config-clientserver.port=8889#配置服务中心网址spring.cloud.config.uri=http://localhost:8888/#dev开发环境配置文件,test测试环境,pro正式环境spring.cloud.config.profile=dev#远程仓库的分支spring.cloud.config.label=master

    application.java代码:

@SpringBootApplication@RestControllerpublic class ConfigClientApplication{   public static void main(String[] args){     SpringApplication.run(ConfigClientApplication.class,args);   }      @Value("${foo}")   String foo;   @RequestMapping(value="/hi")   public String hi() {      return foo;   }}

    这里写一个程序的入口类,API接口“/hi”,返回从配置中心读取的foo变量的值,运行程序访问http://localhost:8889/hi,结果如下:

foo version 2

    可以看到,可以成功读取了远程Git仓库中的配置信息了。

转载于:https://my.oschina.net/u/3747963/blog/1594729

你可能感兴趣的文章
nyoj 715 Adjacent Bit Counts
查看>>
[转] JavaScript:彻底理解同步、异步和事件循环(Event Loop)
查看>>
jQuery基础:keydown( ) 与 keypress( ) 区别
查看>>
electron 开发环境搭建
查看>>
使用MEF实现通用参数设置
查看>>
修改头像,存入后台
查看>>
嵌入式开发之davinci--- 8148/8168/8127 中的图像缩放sclr、swms之后出现图像视频卡顿、屏幕跳跃的问题...
查看>>
60阶单群同构于A5的证明
查看>>
【备忘】Android获取正在使用网络的IP4地址
查看>>
poj2524
查看>>
BZOJ 3473
查看>>
HTML5定稿了,为什么原生App世界将被颠覆
查看>>
bootstrap与360浏览器不兼容问题
查看>>
android NDK 二、编译方法
查看>>
Rocket - diplomacy - AddressSet
查看>>
责任链模式-2
查看>>
flask常见面试题
查看>>
使用GetModuleFileName函数获取当前程序所在目录
查看>>
并行处理
查看>>
系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构...
查看>>