[置顶] 第一章:初探Spring Cloud Config配置集中管理
2017-06-09 09:11
197 查看
前路艰难,但谨记,你并不孤独。
Spring Cloud如火如荼,抽空研究研究Spring大家族中的新份子。具体的介绍不会粗线在本系列博文中,如需要理论等知识直接百度or谷歌。
Spring Cloud中保护N多已构建好的微服务,可以做到即插即用,其中大致包含几种服务:Config、Eureka、Ribbon、Hystrix、Feign、Bus等,具体介绍及开源地址请见:Spring Cloud中文官网
今天让我们一起研究下Config,让你发现Spring Cloud的美,也许仅仅因为这一个小小的功能就会让你对Spring Cloud爱不释手,有木有呀?
本文中为一个Maven工程cloud-demo,包含多个maven module工程,其中一个配置的集中服务cloud-demo-config,一个使用配置服务的简单Spring Boot工程cloud-demo-helloword,一个存放配置的文件夹cloud-demo-repo。
所有代码地址:https://github.com/S1ow/cloud-demo.git 持续更新
Now show code
第一步,创建主工程,方便管理
主工程是一个简单Maven工程,创建成功后删除所有文件,只留下pom文件,并创建cloud-demo-repo文件夹(此文件夹需要上传到git/svn上,用于配置服务的读取与集中管理),pom.xml:
cloud-demo-repo:配置文件存放处,可以理解为配置的提供方;
cloud-demo-config:配置服务器,所有的配置读取都是由该服务来实现的,它是从git上来读取配置文件的,可以理解为配置文件的中间转换器;
cloud-demo-helloword:一个简单的应用,可以理解为配置的消费方;
第二步,创建配置“服务中心”,cloud-demo-config工程
1、右键cloud-demo工程new –> Mvane Module工程即可,这也是一个Spring Boot应用程序,所有的Spring Cloud的启动方式全部采用Spring boot,pom.xml如下:
采用阿里的maven私服地址
使用的Spring的Brixton配置
2、下面需要创建一个启动类,随着启动类的创建,配置服务也即将搭建完毕了,就是这么so easy:
@SpringBootApplication:查看源码相当于@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解,可谓是三个臭皮匠顶个诸葛亮;
@EnableConfigServer:顾名思义告诉Spring Boot我要开启配置服务,请给我让路好吗?好的!
3、还记得刚开始我们创建的需要上传到git/svn上的文件夹cloud-demo-repo么?这里存放是配置文件,配置服务cloud-demo-config需要知道文件在哪呀,对吧?所以需要修改cloud-demo-config工程的application.properties告诉配置服务,去哪里找配置文件:
4、这样配置服务就搭建好了,先别着急启动,让我们创建一份远程配置cloudhello-test.properties,这里的配置文件命名是很有讲究的,A-B-C.type的命名方式:
A:消费配置服务名称,映射到客户端的“spring.application.name”;
B:profile,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
C:label,可以理解是一个小版本号,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
type:可以是yml、properties
再创建一个cloudhello-dev.properties,方便后面配置消费的调用:
配置服务就搞定了,有木有很简单,可以启动配置服务工程,并可以通过http://ip:port/A/B 来看看读取回来的配置信息啦,其中ip和port为配置服务的,A/B就是上面提到的A/B。
第三步,创建配置的消费,cloud-demo-helloword工程
1、pom.xml,这里不做过多描述,与cloud-demo-config工程配置几乎相同:
2、创建hello工程的启动类:
3、创建一个Controller用于获取远程配置:
4、hello工程的application.properties:
Ok,下面启动hello工程,访问http://127.0.0.1:9999/ 可以得到返回
This is 测试环境
将上述配置文件中的spring.cloud.config.profile修改为dev,重启服务,访问上述地址,可以得到返回:
This is 开发环境
从这个简单的例子中,可以发现切换配置的快速,对于有多个环境需要维护的企业,减低了极大的成本,带来更短的时间,更高的安全性。
快去试试吧。
Spring Cloud如火如荼,抽空研究研究Spring大家族中的新份子。具体的介绍不会粗线在本系列博文中,如需要理论等知识直接百度or谷歌。
Spring Cloud中保护N多已构建好的微服务,可以做到即插即用,其中大致包含几种服务:Config、Eureka、Ribbon、Hystrix、Feign、Bus等,具体介绍及开源地址请见:Spring Cloud中文官网
今天让我们一起研究下Config,让你发现Spring Cloud的美,也许仅仅因为这一个小小的功能就会让你对Spring Cloud爱不释手,有木有呀?
本文中为一个Maven工程cloud-demo,包含多个maven module工程,其中一个配置的集中服务cloud-demo-config,一个使用配置服务的简单Spring Boot工程cloud-demo-helloword,一个存放配置的文件夹cloud-demo-repo。
所有代码地址:https://github.com/S1ow/cloud-demo.git 持续更新
Now show code
第一步,创建主工程,方便管理
主工程是一个简单Maven工程,创建成功后删除所有文件,只留下pom文件,并创建cloud-demo-repo文件夹(此文件夹需要上传到git/svn上,用于配置服务的读取与集中管理),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>cloud</groupId> <artifactId>cloud-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>cloud-demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <modules> <module>cloud-demo-config</module> <module>cloud-demo-helloword</module> </modules> </project>
cloud-demo-repo:配置文件存放处,可以理解为配置的提供方;
cloud-demo-config:配置服务器,所有的配置读取都是由该服务来实现的,它是从git上来读取配置文件的,可以理解为配置文件的中间转换器;
cloud-demo-helloword:一个简单的应用,可以理解为配置的消费方;
第二步,创建配置“服务中心”,cloud-demo-config工程
会发现创建一个Spring Cloud Config配置服务是多么的轻量级,以后的代码会不会变成傻瓜式编程呢?
1、右键cloud-demo工程new –> Mvane Module工程即可,这也是一个Spring Boot应用程序,所有的Spring Cloud的启动方式全部采用Spring boot,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>cloud</groupId> <artifactId>cloud-demo-config</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>cloud-demo-config</name> <description>cloud-demo-config</description> <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> <repository> <snapshots> <enabled>true</enabled> </snapshots> <id>public</id> <name>Public Repositories</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>Public Repositories</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> <dependencies> <!-- 配置服务所需的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- 暴露服务的一些管理功能 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 测试组件,权重test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <defaultGoal>compile</defaultGoal> </build> </project>
采用阿里的maven私服地址
使用的Spring的Brixton配置
2、下面需要创建一个启动类,随着启动类的创建,配置服务也即将搭建完毕了,就是这么so easy:
package org.cloud.demo.config; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; /** * 配置服务中心 * */ @SpringBootApplication //只需要一个注解即开启了配置服务的管理 @EnableConfigServer public class ConfigApplication{ public static void main( String[] args ){ SpringApplication.run(ConfigApplication.class, args); } }
@SpringBootApplication:查看源码相当于@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解,可谓是三个臭皮匠顶个诸葛亮;
@EnableConfigServer:顾名思义告诉Spring Boot我要开启配置服务,请给我让路好吗?好的!
3、还记得刚开始我们创建的需要上传到git/svn上的文件夹cloud-demo-repo么?这里存放是配置文件,配置服务cloud-demo-config需要知道文件在哪呀,对吧?所以需要修改cloud-demo-config工程的application.properties告诉配置服务,去哪里找配置文件:
#配置服务的启动端口,此处可不使用远程配置 server.port=8888 #配置服务的名称,总之你喜欢就好 spring.application.name=cloud-demo-config #配置服务去哪里找配置文件 spring.cloud.config.server.git.uri=https://github.com/S1ow/cloud-demo.git #去哪个文件夹找配置文件 spring.cloud.config.server.git.searchPaths=cloud-demo-repo
4、这样配置服务就搭建好了,先别着急启动,让我们创建一份远程配置cloudhello-test.properties,这里的配置文件命名是很有讲究的,A-B-C.type的命名方式:
A:消费配置服务名称,映射到客户端的“spring.application.name”;
B:profile,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
C:label,可以理解是一个小版本号,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
type:可以是yml、properties
#这里的配置跟配置服务没有半毛钱关系,用于配置服务的消费应用的 config.server.ip=127.0.0.1 config.server.port=8888 app.profile=test #测试环境 app.hello=\u6D4B\u8BD5\u73AF\u5883\uFF01
再创建一个cloudhello-dev.properties,方便后面配置消费的调用:
config.server.ip=127.0.0.1 config.server.port=8888 app.profile=dev #开发环境 app.hello=\u5F00\u53D1\u73AF\u5883
配置服务就搞定了,有木有很简单,可以启动配置服务工程,并可以通过http://ip:port/A/B 来看看读取回来的配置信息啦,其中ip和port为配置服务的,A/B就是上面提到的A/B。
第三步,创建配置的消费,cloud-demo-helloword工程
1、pom.xml,这里不做过多描述,与cloud-demo-config工程配置几乎相同:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <!-- <parent> <groupId>cloud</groupId> <artifactId>cloud-demo</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> --> <groupId>cloud-demo-helloword</groupId> <artifactId>cloud-demo-helloword</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud-demo-helloword</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> <relativePath /> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <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-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <repositories> <repository> <snapshots> <enabled>true</enabled> </snapshots> <id>public</id> <name>Public Repositories</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>Public Repositories</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、创建hello工程的启动类:
package org.cloud.demo.helloword; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloApplication { public static void main( String[] args ){ SpringApplication.run(HelloApplication.class, args); } }
3、创建一个Controller用于获取远程配置:
package org.cloud.demo.helloword; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public class HelloController { //将从远程配置获取app.hello这个key @Value("${app.hello}") String bar; //根据配置的不同输出不同 @RequestMapping("/") String hello(){ return "This is " + bar; } }
4、hello工程的application.properties:
#配置服务的名称,与cloudhello-test.properties中的cloudhello相同 spring.application.name=cloudhello #hello工程启动端口 server.port=9999 #告诉springcloud去哪里找配置,这里的config.server.ip与#config.server.port均为远程配置 spring.cloud.config.uri=http://${config.server.ip}:${config.server.port} #读取那个服务的配置 spring.cloud.config.name=cloudhello 获取哪个profile,如果获取不到默认为test spring.cloud.config.profile=test
Ok,下面启动hello工程,访问http://127.0.0.1:9999/ 可以得到返回
This is 测试环境
将上述配置文件中的spring.cloud.config.profile修改为dev,重启服务,访问上述地址,可以得到返回:
This is 开发环境
从这个简单的例子中,可以发现切换配置的快速,对于有多个环境需要维护的企业,减低了极大的成本,带来更短的时间,更高的安全性。
快去试试吧。
相关文章推荐
- [置顶] [编译原理读书笔记][第一章 引论]
- [置顶] 信息学奥赛一本通(C++版) 第二部分 基础算法 第一章 高精度计算
- [置顶] 信息学奥赛一本通(C++版) 第三部分 数据结构 第一章 栈
- [置顶] 【其他部分 第一章 矩阵】The C Programming Language 程序研究 【持续更新】
- [置顶] 《前端从傻逼到牛逼》第一章 乾坤大挪移
- [置顶] 《现代密码学》第一章——经典密码学介绍
- [置顶](1) 第一章 WCF学前知识-什么是SOA?
- [置顶] [汇编语言学习笔记][第一章基础知识]
- [置顶] [CSAPP笔记][第一章计算机系统漫游]
- [置顶](2) 第一章 WCF学前知识-SOA设计架构原则
- [置顶] 《JVM》第一章 JVM内存模型
- [置顶] 信息学奥赛一本通(C++版) 第一部分 C++语言 第一章 C++语言入门
- [置顶] 第一章 绪论
- [置顶] QeePHP 快速入门 -- 色色pdf版本 -- 第一章初步完成
- [置顶] 地理信息系统矢量数据的组织形式 第一章:二维空间对象数据模型
- [置顶] 第一章 C语言关键字 - auto和register
- [置顶] 剑指Offer学习总结-第一章 面试的流程
- [置顶] (连载)边喝咖啡边学Unity——第一章 Unity概述
- 《Pattern Recognition and Machine Learning》学习笔记 第一章(一)
- 《Python核心编程》 第一章