网络公司网站建设,河南建设厅官网证件查询入口,免费咨询律师的app,我要自学网ps视频教程免费一、简介
在分布式系统中#xff0c;由于服务数量巨多#xff0c;为了方便服务配置文件统一管理#xff0c;实时更新#xff0c;所以需要分布式配置中心组件。 在Spring Cloud中#xff0c;有分布式配置中心组件spring cloud config #xff0c;它支持配置服务放在配置服…一、简介
在分布式系统中由于服务数量巨多为了方便服务配置文件统一管理实时更新所以需要分布式配置中心组件。 在Spring Cloud中有分布式配置中心组件spring cloud config 它支持配置服务放在配置服务的内存中即本地也支持放在远程Git仓库中。
在spring cloud config 组件中分两个角色 一是config server二是config client。
在企业中这2个应用都应该要注册到Eureka-server上面这样可以更好的监控服务的状态。
二、构建Config Server
第1步创建父工程(maven)父pom文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.0.3.RELEASE/versionrelativePath//parentmodulesmoduleconfig-server/modulemoduleeureka-server/modulemoduleconfig-client/module/modulesgroupIdcom.gblfy/groupIdartifactIdsc-f-chapter6/artifactIdversion0.0.1-SNAPSHOT/versionpackagingpom/packagingnamesc-f-chapter6/namedescriptionDemo project for Spring Boot/descriptionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.versionspring-cloud.versionFinchley.RELEASE/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project第2步 创建一个spring-boot项目取名为config-server
其pom.xml如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.gblfy/groupIdartifactIdsc-f-chapter6/artifactIdversion0.0.1-SNAPSHOT/version/parentgroupIdcom.gblfy/groupIdartifactIdconfig-server/artifactIdversion0.0.1-SNAPSHOT/versionnameconfig-server/namedescriptionDemo project for Spring Boot/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-config-server/artifactId/dependency/dependencies
/project第3步在程序的入口Application类加上EnableConfigServer注解开启配置服务器的功能
代码如下
SpringBootApplication
EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}}第4步需要在程序的配置文件application.properties文件配置以下
#注册中心地址
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
#服务端口号
server:port: 8888
#应用名称
#git远程仓库的配置信息 地址 账号 秘钥 本地保存配置文件的路径
spring:application:name: config-servercloud:config:server:git:uri: gitgithub.com:gb-heima/config-rep.gitusername:password:basedir: /Users/Administrator.PC-20180929LWLP/Desktop/springcloud-practical-column/sc-f-chapter6/config/basedirspring.cloud.config.server.git.uri配置git仓库地址spring.cloud.config.server.git.searchPaths配置仓库路径spring.cloud.config.server.git.username访问git仓库的用户名spring.cloud.config.server.git.password访问git仓库的用户秘钥spring.cloud.config.server.git.basedir保存配置文件的本地路径 如果Git仓库为公开仓库可以不填写用户名和密码如果是私有仓库需要填写本例子是公开仓库放心使用。
第5步在远程仓库创建仓库和新增配置文件
在远程仓库创建一个仓库名称为config-re在config-rep仓库中新建一个文件名为config-client-dev.properties文件中的内容属性如下
#应用名称
spring:application:name: config-client
#环境分支
env: dev
# 测试远程拉取信息1
girl:name: yuxinage: 1远程仓库地址https://github.com/gb-heima/config-rep.git
场景测试1
config-server服务成功注册到eureka-server(注册中心)config-server成功从远程git仓库拉取文件并在浏览器正常显示仓库配置的信息
操作流程如下
先启动eureka-server工程端口号8761再启动config-server工程端口号8888启动程序访问http://localhost:8888/config-client-dev.yml测试效果图1 也可以访问:http://localhost:8888/gblfy/dev效果图2
{
name: girl,
profiles: [
dev
],
label: null,
version: cfab60b6d3e093ab5227f0694f0f4b5e8a80e9e2,
state: null,
propertySources: []
}证明配置服务中心可以从远程程序获取配置信息
注配置好远程仓库信息后可以通过配置中心验证配置信息是否正确正确会正常显示不正确会有提示根据提示进行修改即可
http请求地址和资源文件映射如下:
/{application}/{profile}[/{label}]/{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties
三、构建一个config client
第1步重新创建一个springboot项目取名为config-client, 引入pom依赖如下所示
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.gblfy/groupIdartifactIdsc-f-chapter6/artifactIdversion0.0.1-SNAPSHOT/version/parentgroupIdcom.gblfy/groupIdartifactIdconfig-client/artifactIdversion0.0.1-SNAPSHOT/versionnameconfig-client/namedescriptionDemo project for Spring Boot/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-config/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependency/dependencies
/project在上面依赖基础上再添加以下3个依赖
lombok省区写getsetspring-boot-starter-data-jpa控制台输出sql 操作数据库mysql-connector-java数据库依赖及驱动等信息
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency第2步添加启动主类
SpringBootApplication
EnableEurekaClient
EnableDiscoveryClient
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}第3步全局配置文件bootstrap.yml mysql和jpa的配置信息配置到git远程仓库中的config-client-dev.yml文件中 config-client-dev.yml文件内容如下所示
#应用名称
spring:application:name: config-client
# 数据库配置datasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/springcloud_sell?characterEncondingutf-8useSSLfalse
# 控制台输出sqljpa:show-sql: true
#环境分支
env: dev
# 测试远程拉取信息
girl:name: yuxinage: 1本地bootstrap.yml配置内容如下
#应用名称
spring:application:name: config-clientcloud:config:discovery:enabled: true
# 服务端应用名称service-id: CONFIG-SERVERprofile: dev
#注册中心地址
eureka:client:service-url:defaultZone: http://localhost:8761/eureka
#服务端口号
server:port: 8881spring.cloud.config.profile
dev开发环境配置文件test测试环境pro正式环境
注意这里配置文件名称不是application.yml而是替换成bootstrap.yml
理由如下 1、当全局配置文件为application.yml时应用启动就会从配置文件中读取配置信息再去将自己的服务注册到eureka-server上面 2、当全局配置文件为bootstrap.yml时应用启动就会先将服务注册中eureka-server注册中心然后通过应用名称在注册中心找到配置中心的应用也就是(CONFIG-SERVER) 3、CONFIG-SERVER就会从git远程仓库中拉取配置信息
举个栗子 在config-client服务中配置了mysq数据库的配置而mysql的配置信息放到了远程的git仓库中在本地是没有的。用application.yml当配置文件时就是启动报错异常信息时找不到jdbc的信息。
解决方案 将application.yml配置文件更名为bootstrap.yml(注文件后缀名.properties也支持)
本地的bootstrap.yml和远程的bootstrap.yml是通过config-server端连接git远程仓库拉取配置信息再通过应用名称来取配置信息应用名称一致config-server就可以成功拉取配置信息config-client在从config-server服务中拉取配置信息。
架构如图所示:
第4步写一个与bootstrap.yml配置文件中信息对应的配置类GirlConfig(用户去配置文件中的信息)
Data
Component
ConfigurationProperties(prefix girl)
public class GirlConfig {private String name;private Integer age;
}第5步程序的入口类GirlController写一个API接口“/girl//info”返回从配置中心读取的girl对象变量的值 代码如下
RestController
RequestMapping(/girl)
public class GirlController {Autowiredprivate GirlConfig girlConfig;GetMapping(/info)public String getGirlInfo() {return name: girlConfig.getName() , girlConfig.getAge();}
}
启动config-client查看控制台发现config-client从config-server应用中拉取配置信息Fetching config from server at : http://PC-20180929LWLP:8888/打开网址访问http://localhost:8881/girl//info网页显示这就说明config-client从config-server获取了girl对象的属性而config-server是从git远程仓库再区配应用名称读取的
本文源码下载
dev分支(最新企业实战版本): https://github.com/gb-heima/springcloud-practical-column/tree/dev/sc-f-chapter6
master分支(入门版本): https://github.com/gb-heima/springcloud-practical-column/tree/master/sc-f-chapter6