SpringCloud之统一配置中心
Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于Spring构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于Spring Cloud Config实现的配置中心默认采用Git来存储配置信息,所以使用Spring Cloud Config构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便的管理和访问配置内容。当然它也提供了对其他存储方式的支持,比如:SVN仓库、本地化文件系统。
在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对服务进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。
配置仓库
在码云或github上创建一个仓库,我这里是在码云创建的,地址为
http://git.oschina.net/swlfly/config-repo-demo/
新建一个配置文件client2.yml,将client-two的配置内容复制过来
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #注册服务器地址
instance:
hostname: client2
spring:
application:
name: client2
server:
port: 8081
创建服务
IDEA新建一个config服务,使用注解@EnableConfigServer开启一个配置中心
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
配置文件如下
spring:
application:
name: config
cloud:
config:
server:
git:
uri: http://git.oschina.net/swlfly/config-repo-demo/
username: xxxxx # git用户名
password: xxxx #git密码
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
server:
port: 8082 #端口号
需要认证的时候username和password分别输入git的用户名和密码,启动服务,访问localhost:8082/client-a.yml,返回的内容如下
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
hostname: client2
server:
port: 8081
spring:
application:
name: client2
从IDEA的控制台输出可以看到有多种Mapped,如
{name}-{profiles}.yml
{label}/{name}-{profiles}.yml
这里name代表服务名,我们这里就是client2,profiles代表环境如dev,test,prod,label代表分支,默认为master,如访问http://localhost:8082/master/client2-a.yml在这里实际和访问localhost:8082/client-a.yml返回的内容一样,接下来我们在config-repo-demo创建一个client2-dev.yml和client2-test.yml来验证profiles
client2-dev.yml内容如下:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #注册服务器地址
instance:
hostname: client2
spring:
application:
name: client2
server:
port: 8081
env: dev
client2-test.yml内容如下
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #注册服务器地址
instance:
hostname: client2
spring:
application:
name: client2
server:
port: 8081
env: test
访问http://localhost:8082/master/client2-dev.yml返回的内容为
env: dev
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
hostname: client2
server:
port: 8081
spring:
application:
name: client2
访问http://localhost:8082/master/client2-test.yml返回的内容为
env: test
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
hostname: client2
server:
port: 8081
spring:
application:
name: client2
在config-repo-demo创建一个分支来验证label,创建分支release
image.png
修改分支release里的client2-dev内容如下
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #注册服务器地址
instance:
hostname: client2
spring:
application:
name: client2
server:
port: 8081
env: dev
label: release
访问http://localhost:8082/release/client2-dev.yml返回如下内容
env: dev
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
hostname: client2
label: release
server:
port: 8081
spring:
application:
name: client2
源码地址: https://gitee.com/swlfly/SpringCloud_Learn/tree/1.5
更多技术文章可关注个人公众号: 码农Fly