环境准备
git仓库上传三个配置文件到config-repo,命名分别为:config-client -dev.yml、config-client-prod.yml、config-client-test.yml分别代表开发环境,生产环境,测试环境。(这里多说一嘴:使用过nacos的朋友应该很熟悉,配置文件命名默认是有格式约束的 例 {applicationname}-{profile}.yml 其中applicationname为服务名,profile为环境标识)创建工程
父工程pom文件
<properties> <spring.cloud.version>Greenwich.RELEASEspring.cloud.version> <spring.boot.version>2.1.6.RELEASEspring.boot.version> properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-dependenciesartifactId> <version>${spring.cloud.version}version> <type>pomtype> <scope>importscope> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-dependenciesartifactId> <version>${spring.boot.version}version> <type>pomtype> <scope>importscope> dependency> dependencies> dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> build>
创建服务
1.创建eureka注册中心
(1)pom文件
<dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId> dependency> dependencies>
(2)bootstrap.yml
server: port: 10086 # 端口spring: application: name: eureka-server # 应用名称,会在Eureka中显示eureka: client: service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。 defaultZone: http://127.0.0.1:${server.port}/eureka fetch-registry: false # 不通过eureka获取注册信息
(3)启动类
@SpringBootApplication@EnableEurekaServerpublic class EurekaApp { public static void main(String[] args) { SpringApplication.run(EurekaApp.class,args); }}
2.创建config-server服务
(1)pom文件
<dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-config-serverartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId> dependency> dependencies>
(2)bootstrap.yml
server: port: 7001spring: application: name: config-server cloud: config: name: config-repo server: git: uri: https://github.com/DikU-16/config-repo.git username: yourusername password: yourpassword searchPaths: config-repoeureka: client: service-url: defaultZone: http://localhost:10086/eureka
(3)启动类
@SpringBootApplication@EnableConfigServerpublic class SerApp { public static void main(String[] args) { SpringApplication.run(SerApp.class,args); }}
到这一步,我们先不创建config-client服务,测试一下config-server
浏览器发送请求
说明可以读取到git仓库的配置文件
可以以{.properties}和{.json}格式访问,例:
3.创建config-client服务
(1)pom文件
<dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-config-clientartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId> dependency> dependencies>
(2)bootstrap.yml
server: port: 7002spring: application: name: config-client cloud: config: label: master profile: prod# uri: http://localhost:7001/ # 如果不通过eureka拉取就用uri discovery: enabled: true service-id: config-servereureka: client: service-url: defaultZone: http://localhost:10086/eureka
如果我们不想注册到注册中心,可以直接使用uri获取(现在我们用的是service-id通过获取注册中心的服务名来获取)
(3)启动类
public class CliApp { @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @GetMapping("/hello") public String hello() { return "username: " +username+"------------> password: "+password; } public static void main(String[] args) { SpringApplication.run(CliApp.class,args); }}
启动服务
配置说明
分别启动eureka、config-server、eureka-client服务
成功注册到eureka
当我们启动eureka-client服务时,可以看到控制台打印的两条重要信息
ConfigServicePropertySourceLocator 类调用了配置中心服务接口地址
如果从配置中心拉取配置文件成功,会输出如下日志
测试结果
源码已经上传到github,地址https://github.com/DikU-16/config-repo.git
总结
使用 ConfigServer 作为服务的配置中心需要依赖第三方配置仓库,如 Gitlab、Svn等;并且 ConfigServer 没有可视化的控制台,如果需要动态刷新配置需要依赖其他的中间件,所以一旦涉及配置文件需要修改将是一件非常麻烦的事情。 而市面上如阿里的 Nacos 、携程的 Appllo 等配置中心很好的解决这个问题,像 Nacos 可以持久化配置,并且完整的保留历史的修订版本,能够实现上个版本的恢复操作,非常的友好。 所以现在针对 SpringCloud 的生态中,有些组件是可以替换的,例如:Nacos(注册中心&配置中心) 对标 Eureka、ConfigServer
感兴趣可以阅读 Nacos入门案例
Consul 对标 ConfigServer
如果您觉得本文对你有帮助,欢迎老铁们帮忙:点赞、关注、留言、分享,你们的支持是我原创最大的动力。