Github上配置SpringCloud的配置文件:
问题
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件管理起来势必使以减十分麻烦的事情因此我们引入了SpringCloud Config。
简介
SpringConfig图解
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
SpringCloud Config分为服务端和客户端两部分。
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
作用
集中管理配置文件
不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
运行期间动态调整配置,不需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
将配置信息以REST接口的形式暴露
GitHub整合
在GitHub上创建一个repository
获取到git的链接git@github.com:bigdataxiaohan/microservicecloud-config.git
在本地创建一个仓库
在本地的仓库在创建一个application.yml 注意保存的编码格式必要是UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 spring: profiles: active: - dev --- spring: profiles: dev application: name: microservicecloud-config-hphblog-dev --- spring: profiles: test application: name: microservicecloud-config-hphblog-test
将本地的配置文件推送到github上去
查看github上的配置信息
新建一个Moudle microservicecloud-config-3344
作为配置中心模块
pom.xml文件修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <?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" > <parent > <artifactId > microservicecloud</artifactId > <groupId > com.hph.springcloud</groupId > <version > 1.0-SNAPSHOT</version > </parent > <modelVersion > 4.0.0</modelVersion > <artifactId > microservicecloud-config-3344</artifactId > <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 > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-hystrix</artifactId > </dependency > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-eureka</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-jetty</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > springloaded</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-devtools</artifactId > </dependency > </dependencies > </project >
application.yml
1 2 3 4 5 6 7 8 9 10 11 server: port: 3344 spring: application: name: microservicecloud-config cloud: config: server: git: uri: https://github.com/bigdataxiaohan/microservicecloud-config.git
Config_3344_StartSpringCloudApp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.hph.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication @EnableConfigServer public class Config_3344_StartSpringCloudApp { public static void main (String[] args) { SpringApplication.run(Config_3344_StartSpringCloudApp.class,args); } }
windows下修改hosts文件,增加映射
1 127.0.0.1 config-3344.com
测试
启动Config_3344_StartSpringCloudApp
访问http://config-3344.com:3344/application-dev.yml
访问http://config-3344.com:3344/application-test.yml
访问http://config-3344.com:3344/application-xxx.yml (不存在的配置)
访问方式
链接地址:https://github.com/spring-cloud/spring-cloud-config/issues/292
方式一
/{application}/{profile}[/{label}]
访问:http://config-3344.com:3344/application/dev/master
访问:http://config-3344.com:3344/application/test/master
访问: http://config-3344.com:3344/application/xxx/master
方式二
/{label}/{application}-{profile}.yml
访问http://config-3344.com:3344/master/application-dev.yml
访问http://config-3344.com:3344/master/application-test.yml
配置客户端
创建一个microservicecloud-config-client.yml文件
microservicecloud-config-client.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 spring: profiles: active: - dev --- server: port: 8201 spring: profiles: dev application: name: microservicecloud-config-client eureka: client: service-url: defaultZone: http://eureka-dev.com:7001/eureka/ --- server: port: 8202 spring: profiles: test application: name: microservicecloud-config-client eureka: client: service-url: defaultZone: http://eureka-test.com:7001/eureka/
新建microservicecloud-config-client-3355
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 <?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" > <parent > <artifactId > microservicecloud</artifactId > <groupId > com.hph.springcloud</groupId > <version > 1.0-SNAPSHOT</version > </parent > <modelVersion > 4.0.0</modelVersion > <artifactId > microservicecloud-config-client-3355</artifactId > <dependencies > <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.cloud</groupId > <artifactId > spring-cloud-starter-hystrix</artifactId > </dependency > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-eureka</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-jetty</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > springloaded</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-devtools</artifactId > </dependency > </dependencies > </project >
bootstrap.yml
applicaiton.yml是用户级的资源配置项
1 2 3 4 5 6 7 spring: cloud: config: name: microservicecloud-config-client profile: test label: master uri: http://config-3344.com:3344
bootstrap.yml是系统级的,优先级更加高
application.yml
1 2 3 spring: application: name: microservicecloud-config-client
Spring Cloud会创建一个Bootstrap Context
,作为Spring应用的Application Context
的父上下文。初始化的时候,Bootstrap Context
负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment
。Bootstrap
属性有高优先级,默认情况下,它们不会被本地配置覆盖。 Bootstrap context
和Application Context
有着不同的约定, 所以新增了一个bootstrap.yml
文件,保证Bootstrap Context
和Application Context
配置的分离。
增加映射
1 127.0.0.1 client-config.com
新建rest类,验证是否能从GitHub上读取配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package com.hph.springcloud.rest;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController public class ConfigClientRest { @Value ("${spring.application.name}" ) private String applicationName; @Value ("${eureka.client.service-url.defaultZone}" ) private String eurekaServers; @Value ("${server.port}" ) private String port; @RequestMapping ("/config" ) public String getConfig () { String str = "applicationName: " +applicationName+"\t eurekaServers:" +eurekaServers+"\t port: " +port; System.out.println("******str: " + str); return "applicationName: " +applicationName+"\t eurekaServers:" +eurekaServers+"\t port: " +port; } }
测试
启动Config配置中心3344微服务并自测
访问http://config-3344.com:3344/application-dev.yml
因为我们配置的文件是test访问的端口是8202
访问测试端口
SpringCloud Config配置实战
注意:编码方式一定要是UTF-8
新建microservicecloud-config-eureka-client.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 spring: profiles: active: - dev --- server: port: 7001 spring: profiles: dev application: name: microservicecloud-config-eureka-client eureka: instance: hostname: eureka7001.com client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://eureka7001.com:7001/eureka/ --- server: port: 7001 spring: profiles: test application: name: microservicecloud-config-eureka-client eureka: instance: hostname: eureka7001.com client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://eureka7001.com:7001/eureka/
新建microservicecloud-config-dept-client.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 spring: profiles: active: - dev - -- server: port: 8001 spring: profiles: dev application: name: microservicecloud-config-dept-client datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://192.168.1.110:3306/cloudDB01 username: root password: 123456 dbcp2: min-idle: 5 initial-size: 5 max-total: 5 max-wait-millis: 200 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml type-aliases-package: com.hph.springcloud.entities mapper-locations: - classpath: mybatis/mapper/**/*.xml eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka instance: instance-id: dept-8001.com prefer-ip-address: true info: app.name: hphblog-microservicecloud-springcloudconfig01 company.name: www.hphnlog.cn build.artifactId: ${project.artifactId} build.version: ${project.version} --- server: port: 8001 spring: profiles: test application: name: microservicecloud-config-dept-client datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://192.168.1.110:3306/cloudDB02 username: root password: 123456 dbcp2: min-idle: 5 initial-size: 5 max-total: 5 max-wait-millis: 200 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml type-aliases-package: com.hph.springcloud.entities mapper-locations: - classpath: mybatis/mapper/**/*.xml eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka instance: instance-id: dept-8001.com prefer-ip-address: true info: app.name: hphblog-microservicecloud-springcloudconfig01 company.name: www.hphnlog.cn build.artifactId: ${project.artifactId} build.version: ${project.version}
新建工程microservicecloud-config-eureka-client-7001
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?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" > <parent > <artifactId > microservicecloud</artifactId > <groupId > com.hph.springcloud</groupId > <version > 1.0-SNAPSHOT</version > </parent > <modelVersion > 4.0.0</modelVersion > <artifactId > microservicecloud-config-eureka-client-7001</artifactId > <dependencies > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-config</artifactId > </dependency > <dependency > <groupId > org.springframework.cloud</groupId > <artifactId > spring-cloud-starter-eureka-server</artifactId > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > springloaded</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-devtools</artifactId > </dependency > </dependencies > </project >
bootstrap.yml
1 2 3 4 5 6 7 spring: cloud: config: name: microservicecloud-config-eureka-client profile: dev label: master uri: http://config-3344.com:3344
application.yml
1 2 3 spring: application: name: microservicecloud-config-eureka-client
Config_Git_EurekaServerApplication
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.hph.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication @EnableEurekaServer public class Config_Git_EurekaServerApplication { public static void main (String[] args) { SpringApplication.run(Config_Git_EurekaServerApplication.class, args); } }
测试
先启动microservicecloud-config-3344微服务,保证Config总配置状态可用
再启动microservicecloud-config-eureka-client-7001微服务
访问http://eureka7001.com:7001/
microservicecloud-config-dept-client-8001
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 <?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" > <parent > <artifactId > microservicecloud</artifactId > <groupId > com.hph.springcloud</groupId > <version > 1.0-SNAPSHOT</version > </parent > <modelVersion > 4.0.0</modelVersion > <artifactId > microservicecloud-config-dept-client-8001</artifactId > <dependencies > <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.cloud</groupId > <artifactId > spring-cloud-starter-eureka</artifactId > </dependency > <dependency > <groupId > com.hph.springcloud</groupId > <artifactId > microservicecloud-api</artifactId > <version > ${project.version}</version > </dependency > <dependency > <groupId > junit</groupId > <artifactId > junit</artifactId > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > </dependency > <dependency > <groupId > com.alibaba</groupId > <artifactId > druid</artifactId > </dependency > <dependency > <groupId > ch.qos.logback</groupId > <artifactId > logback-core</artifactId > </dependency > <dependency > <groupId > org.mybatis.spring.boot</groupId > <artifactId > mybatis-spring-boot-starter</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-jetty</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > springloaded</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-devtools</artifactId > </dependency > </dependencies > </project >
bootstrap.yml
1 2 3 4 5 6 7 8 9 spring: cloud: config: name: microservicecloud-config-dept-client profile: test label: master uri: http://config-3344.com:3344
application.yml
1 2 3 spring: application: name: microservicecloud-config-dept-client
主启动类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.hph.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient public class DeptProvider8001_App { public static void main (String[] args) { SpringApplication.run(DeptProvider8001_App.class, args); } }
其他配置
参考microservicecloud-provider-dept-8001
测试
启动microservicecloud-config-3344主启动类
启动microservicecloud-config-client-3355主启动类
启动microservicecloud-config-eureka-client-7001主启动类
启动microservicecloud-config-dept-client-8001主启动类
由于我们激活的配置是test所以我们访问一下<http://localhost:8001/dept/list >
修改microservicecloud-config-dept-client-8001中的profile属性改成dev
我们将本地的文件修改一下让dev模式下访问3号数据库重新启动所有服务
完整代码
Github地址: https://github.com/bigdataxiaohan/microservicecloud/tree/master/SpringConfig
所有评论(0)