摘要:比如使用的时候指定使用哪个环境的配置在微服务架构下,服务的数量会比之前的单体应用多,部署的节点数量也会很多。今天主要是讲下在中如何对接进行配置管理。
问题背景
在实际工作中,我们的开发环境,测试环境,生产环境对应的 Mysql 数据库,Redis 这些信息都不一样,每个环境都有对应的一套配置,在 Spring Boot 中我们通常会编写多个配置文件,也就是每个环境一个配置文件。
比如:
application-dev.properties
spring.datasource.druid.url=jdbc:mysql://192.168.0.111:3306/xxx
application-test.properties
spring.datasource.druid.url=jdbc:mysql://192.168.0.112:4306/xxx
使用的时候指定使用哪个环境的配置:
java -jar xxx.jar --spring.profiles.active=test
在微服务架构下,服务的数量会比之前的单体应用多,部署的节点数量也会很多。当某些配置发生修改的时候,我们需要重新修改项目中的代码,然后重新发布。当然也可以直接通过上面的 --xxx 方式进行参数的传递,这种方式不好的地方在于项目中的配置跟线上发布的对应不上。
最简单的一个示例,直接修改项目中的配置,然后重新编译,发布,你改一次配置至少得10来分钟。对于某些活动的应用配置,可能在某个时候突然需要进行紧急修改,这样一来就被时间耽误了事情。
最好的办法是使用配置中心来集中管理配置,可以做到配置修改立马更新到客户端,只要1秒钟就可以搞定配置的修改,优势很明显。
框架推荐今天给大家介绍一款在社区非常火的配置中心:Apollo
Github : https://github.com/ctripcorp/...
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
对Apollo本身就不做过多细致的介绍,感兴趣的朋友可以去 Github 详细了解。
今天主要是讲下在 Spring Boot 中如何对接 Apollo 进行配置管理。
首先你得部署好了Apollo,Apollo提供了一个快速体验包,大家可以下载下来直接启动,具体操作请参考 Github 。不过官方本身也为我们准备了一个演示的地址,我们可以直接用来学习:http://106.12.25.204:8070 账号/密码:apollo/admin
Spring Boot中使用进入演示地址,找一个应用点进去:
我们基于默认的集群的application空间来做演示
准备一个 Spring Boot 项目,加入 Apollo Client 的 Maven 依赖:
com.ctrip.framework.apollo apollo-client 1.1.0
然后配置Apollo的信息,配置放在application.properties中:
app.id=apollo-demo apollo.meta=http://106.12.25.204:8080 apollo.bootstrap.enabled=true apollo.bootstrap.namespaces=application
app.id:身份信息,就是应用名称,跟我们第一张图点进去的一样
apollo.meta:Meta Server(Config Service)
apollo.bootstrap.enabled:项目启动的bootstrap阶段,向Spring容器注入配置信息
apollo.bootstrap.namespaces:注入命名空间
环境我们直接在main方法中指定,演示方便:
@SpringBootApplication public class App { public static void main(String[] args) { // 指定环境(开发演示用,不能用于生产环境)) System.setProperty("env", "DEV"); SpringApplication.run(App.class, args); } }
我们可以准备一个接口进行测试配置的读取,配置读取的方式有很多种,我们就用最常用的@Value
@RestController public class DemoController { @Value("${test.username}") private String name; @GetMapping("/callHello") public String callHello() { return name; } }
当配置修改之后,这边获取的值也会实时修改,大家可以自己测试下。本文只是简单的带大家体验了一下如何使用,还有很多东西没有讲解,如果大家想学习的话可以去我的网站进行学习,我录制了一套课程。
课程地址:http://cxytiandi.com/course/23 课程大纲课程介绍
概念介绍
架构设计介绍
Apollo快速部署
后台介绍
Apollo整合Spring Boot
配置监听
存储Json数据
扩展使用
生产环境部署讲解
欢迎加入我的知识星球,一起交流技术,免费学习猿天地的所有课程,包括这套Apollo目前已经有20+课程了,后续还会更新下去。
配置中心Apollo实战
实战分库分表中间件Sharding-JDBC
实战分布式任务调度框架Elastic Job
微服务架构实战课程-送源码
API加密框架原理解密
Spring Boot中的Mongodb多数据源扩展
Spring Boot + Vue前后端分离实战
Zookeeper-请了解下
Spring Boot从入门到精通课程
实战Java爬虫课程
实战Mongodb课程
等等..................
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73890.html
摘要:我们是不是很好奇配置中心如何做到实时更新并且通知到客户端的这也是一个面试中经常会问到的题目。客户端得到状态码是并且会根据立即去服务端拉取最新的配置。引言 记得我们那时候刚开始学习Java的时候都只是一个单体项目,项目里面的配置基本都是写在项目里面的properties文件中,比如数据库配置啥的,各种逻辑开关,一旦这些配置修改了,还需要重启项目这修改才会生效。随着各种微服务的诞生,服务的...
摘要:我们是不是很好奇配置中心如何做到实时更新并且通知到客户端的这也是一个面试中经常会问到的题目。虽然是携程开源的,但是携程内部也不用它。客户端得到状态码是并且会根据立即去服务端拉取最新的配置。通过定时任务的补充,可以让配置达到最终的一致性。 引言记得我们那时候刚开始学习Java的时候都只是一个单体项目,项目里面的配...
摘要:宋体自年被开源以来,很快便成为了容器编排领域的标准。宋体年月,乐心医疗的第一个生产用集群正式上线。所以于年推出后,乐心医疗的运维团队在开会讨论之后一致决定尽快迁移到。Kubernetes 自 2014 年被 Google 开源以来,很快便成为了容器编排领域的标准。因其支持自动化部署、大规模可伸缩和容器化管理等天然优势,已经被广泛接纳。但由于 Kubernetes 本身的复杂性,也让很多企业的...
摘要:零为何要学源码简单,是我现在看起来最简单的源码不会像封装了一层又一层,把人绕晕,而没有那么多封装,上手快,我们学习就应该从简单的开始凭什么非要去学封的像粽子一样的源码,我们就是要去学简简单单,平时朴素,接地气的源码最接近业务代码的源码。 零 为何要学apollo源码 1 简单,Apollo是我现在看起来最简单的源码不会像spring封装了一层又一层,把人绕晕,而apollo没有那么多封...
摘要:今天逛了逛,顺手精选出了一下近几个月以来上最热门的个项目。相关阅读正式开源,帮助应用快速容器化未来可能会上热门的项目地址介绍哈哈,皮一下很开心。这是我自己开源的一份文档,目前仍在完善中,欢迎各位英雄好汉一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,顺...
阅读 2814·2021-11-22 11:56
阅读 3476·2021-11-15 11:39
阅读 860·2021-09-24 09:48
阅读 662·2021-08-17 10:14
阅读 1287·2019-08-30 15:55
阅读 2727·2019-08-30 15:55
阅读 1278·2019-08-30 15:44
阅读 2733·2019-08-30 10:59