使用Spring Cloud实现分布式配置管理(服务端)
简介
分布式配置管理应该是分布式系统和微服务应用的第一步。想象一下如果你有几十个服务或应用需要配置,而且每个服务还分为开发、测试、生产等不同维度的配置,那工作量是相当大的,而且还容易出错。如果能把各个应用的配置信息集中管理起来,使用一套机制或系统来管理,那么将极大的提高系统开发的生产效率,同时也会提高系统开发环境和生产环境运行的一致性。 在传统开发中我们往往需要自己开发“配置管理服务器”,你可以使用redis、ldap、zookeeper、db等来存放统一配置信息,然后开发一个管理界面来进行管理。传统的做法没什么问题,和spring cloud所提供的配置管理方案相比,就是前者需要自己开发,而后者直接简单使用现成的组件即可。当然还有很重要的一点,spring 配置管理模块由于是spring boot核心来实现的,因此做了大量的工作,可以把一些启动参数进行外部配置,这在传统的方案中是很难办到的,因为涉及到要改写第三方组件的问题,难度很大。比如web应用的绑定端口,传统应用只能在tomcat配置文件里改,而spring cloud却可以放到远程,类似的还有数据库连接、安全框架配置等。 使用spring cloud分布式配置文件总体上分为3个大的步骤: - 首选你需要创建存放配置文件的仓库 - 然后创建一个配置文件服务器,该服务器将配置文件信息转化为rest接口数据, - 然后创建一个应用服务,该服务演示使用分布式配置文件信息。
创建maven工程
配置pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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> <groupId>com.example</groupId> <artifactId>cloud.config.server</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>cloud-config-server</name> <description>cloud-config-server</description> <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Camden.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
配置文件服务端类
package com.example.cloud.config.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class ConfigServerApp { public static void main(String[] args) { SpringApplication.run(ConfigServerApp.class,args); } }
SpringCloud服务配置
- 文件位置概览
- 配置 文件名:application.properties 内容:
server.port=8888 //服务端的端口 spring.cloud.config.server.git.uri=http://isource-nj.huawei.com/z00357864/DataInteligence.git //存放配置文件的git地址 spring.cloud.config.server.git.searchPaths=data-inteligence-ide-project/data-inteligence-service/conf //存放配置文件在git上的相对路径 spring.cloud.config.server.git.username=**** //git用户名 spring.cloud.config.server.git.password=***** //git密码
配置服务运行
直接启动服务,运行ConfigServerApp.main 通过浏览器可直接访问git仓库的配置信息,示例如下:
使用Spring Cloud实现分布式配置管理(客户端)
工程配置
沿用之前SpringBoot HelloWorld的工程,并修改其pom文件如下,注意版本配套关系,否则会发生jar包冲突
<?xml version="1.0" encoding="UTF-8"?> <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> <groupId>com.example</groupId> <artifactId>micro.service.project</artifactId> <version>1.0-SNAPSHOT</version> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
BootStrap配置
spring.cloud.config.uri=http://127.0.0.1:8888 //Spring Cloud Server ip and port spring.cloud.config.name=cloud-config spring.cloud.config.profile=dev
增加RestCrontroller代码
package com.example.micro.service.project; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class ConfigController { @Value("${default.message}") private String msg; @RequestMapping("/test") public String test() { return this.msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
启动运行
直接启动SpringBoot客户端,访问8080端口即可。