spring cloud config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息。服务器端有多种配置方式,如将配置文件存储在本地或者存储在远程git仓库等等,并且在配置文件被更改时,可以通过多种途径如actuator的/refresh端点或者spring cloud bus来动态刷新客户端的配置,而无需重新启动客户端。
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-config-client</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-config</artifactid> </dependency> </dependencies> </project>
package configclient; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplication public class configclientapplication { public static void main(string[] args) { springapplication.run(configclientapplication.class, args); } }
package configclient.controller; import org.springframework.beans.factory.annotation.value; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller @requestmapping("/client") public class configclientcontroller { @value("${nickname}") private string nickname; @getmapping("/hello") public string hello(){ return "hello," + nickname; } }
spring: application: name: sc-config-client profiles: active: dev cloud: config: uri: http://localhost:9003 fail-fast: true server: port: 9002
spring.cloud.config.uri:指定配置中心地址
spring.cloud.config.fail-fase:当连接不上配置中心服务器时,是否使当前客户端异常停止,而不是以默认配置启动。
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-config-server</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> </dependency> </dependencies> </project>
package configserver; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.config.server.enableconfigserver; @springbootapplication @enableconfigserver public class configserverapplication { public static void main(string[] args) { springapplication.run(configserverapplication.class, args); } }
server: port: 9003 spring: application: name: sc-config-server profiles: active: native cloud: config: server: native: searchlocations: classpath:/conf
spring.profiles.active:配置文件的获取方式
spring.cloud.config.server.native.search-locations:本地配置文件的存放路径
nickname: luke
该文件内容为客户端需要从服务端获取的配置信息,文件名称和客户端配置是相对应的,如sc-config-client-dev.yml=【spring.application.name】-【 spring.profiles.active】.yml
启动本地配置中心sc-config-server成功后再启动客户端sc-config-client,访问http://www.lhsxpumps.com/_localhost:9002/client/hello,客户端成功从配置中心获取nickname的配置:
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-config-server-git</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> </project>
package configserver; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.config.server.enableconfigserver; @springbootapplication @enableconfigserver public class gitconfigserverapplication { public static void main(string[] args) { springapplication.run(gitconfigserverapplication.class, args); } }
server: port: 9005 eureka: client: serviceurl: defaultzone: http://localhost:8080/eureka/ spring: application: name: sc-config-server-git cloud: config: server: git: uri: https://github.com/yinchao3577/test777.git username: xxxxx password: xxxxx label: master fail-fast: true
spring.cloud.config.server.git.uri:git存储库地址
spring.cloud.config.server.git.username:用户名
spring.cloud.config.server.git.password:密码
spring.cloud.config.server.git.searchpaths:配置文件所在目录,若在根目录则无需配置
spring.cloud.config.label:git repository的分支,默认为master
pom.xml添加eureka依赖:
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency>
bootstrap.yml改为:
spring: application: name: sc-config-client cloud: config: name: myconfig2 label: master discovery: enabled: true service-id: sc-config-server-git #使用eureka注册中心来发现config配置中心服务 server: port: 9002 eureka: client: serviceurl: defaultzone: http://localhost:8080/eureka/
spring.cloud.config.name:远程仓库中配置文件的名称
spring.cloud.config.discovery.enabled:是否开启配置中心服务发现
spring.cloud.config.discovery.service-id:配置中心服务名称
远程仓库myconfig2.yml值为:
nickname: grace
依次启动注册中心sc-eureka、远程配置中心sc-config-server-git,sc-config-server-git启动成功后再启动客户端sc-config-client,访问http://www.lhsxpumps.com/_localhost:9002/client/hello,客户端成功从配置中心获取nickname的配置:
actuator中包含一个/refresh的端点,用于配置的刷新。对该端点的调用实质是对refreshscope类的调用,refreshscope是上下文中的一个bean,它包含一个公共refreshall()方法和refresh(string)方法,分别用来刷新范围内的所有bean或者指定的单个bean。
pom.xml添加actuator依赖:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
bootstrap.yml添加开启refresh节点的配置:
management: endpoints: web: exposure: include: 'refresh'
如对本文有疑问, 点击进行留言回复!!
android sdk源码 andoid-21 下的TextUtils.java文本工具类 源码赏析
地理坐标(WGS84),投影坐标下(Mercator)切片系统的计算Java类
荐 JavaWeb~简单认识以太网、MAC地址、MTU机制、ARP协议、DNS协议
HUAWEI MH5000-31 LGA Module Hardware Guide draft
网友评论