问题背景

在实际工作中,我们的开发环境,测试环境,生产环境对应的 Mysql 数据库,Redis 这些信息都不一样,每个环境都有对应的一套配置,在 Spring Boot 中我们通常会编写多个配置文件,也就是每个环境一个配置文件。

比如:

application-dev.properties

  1. spring.datasource.druid.url=jdbc:mysql://192.168.0.111:3306/xxx

application-test.properties

  1. spring.datasource.druid.url=jdbc:mysql://192.168.0.112:4306/xxx

使用的时候指定使用哪个环境的配置:

  1. java -jar xxx.jar --spring.profiles.active=test

在微服务架构下,服务的数量会比之前的单体应用多,部署的节点数量也会很多。当某些配置发生修改的时候,我们需要重新修改项目中的代码,然后重新发布。当然也可以直接通过上面的 --xxx 方式进行参数的传递,这种方式不好的地方在于项目中的配置跟线上发布的对应不上。

最简单的一个示例,直接修改项目中的配置,然后重新编译,发布,你改一次配置至少得10来分钟。对于某些活动的应用配置,可能在某个时候突然需要进行紧急修改,这样一来就被时间耽误了事情。

最好的办法是使用配置中心来集中管理配置,可以做到配置修改立马更新到客户端,只要1秒钟就可以搞定配置的修改,优势很明显。

框架推荐

今天给大家介绍一款在社区非常火的配置中心:Apollo

Github : https://github.com/ctripcorp/apollo

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 依赖:

  1. <dependency>
  2. <groupId>com.ctrip.framework.apollo</groupId>
  3. <artifactId>apollo-client</artifactId>
  4. <version>1.1.0</version>
  5. </dependency>

然后配置Apollo的信息,配置放在application.properties中:

  1. app.id=apollo-demo
  2. apollo.meta=http://106.12.25.204:8080
  3. apollo.bootstrap.enabled=true
  4. apollo.bootstrap.namespaces=application
  • app.id:身份信息,就是应用名称,跟我们第一张图点进去的一样
  • apollo.meta:Meta Server(Config Service)
  • apollo.bootstrap.enabled:项目启动的bootstrap阶段,向Spring容器注入配置信息
  • apollo.bootstrap.namespaces:注入命名空间

环境我们直接在main方法中指定,演示方便:

  1. @SpringBootApplication
  2. public class App {
  3. public static void main(String[] args) {
  4. // 指定环境(开发演示用,不能用于生产环境))
  5. System.setProperty("env", "DEV");
  6. SpringApplication.run(App.class, args);
  7. }
  8. }

我们可以准备一个接口进行测试配置的读取,配置读取的方式有很多种,我们就用最常用的@Value

  1. @RestController
  2. public class DemoController {
  3. @Value("${test.username}")
  4. private String name;
  5. @GetMapping("/callHello")
  6. public String callHello() {
  7. return name;
  8. }
  9. }

当配置修改之后,这边获取的值也会实时修改,大家可以自己测试下。本文只是简单的带大家体验了一下如何使用,还有很多东西没有讲解,如果大家想学习的话可以去我的网站进行学习,我录制了一套课程。

课程地址:http://cxytiandi.com/course/23

课程大纲

  • 课程介绍
  • 概念介绍
  • 架构设计介绍
  • Apollo快速部署
  • 后台介绍
  • Apollo整合Spring Boot
  • 配置监听
  • 存储Json数据
  • 扩展使用
  • 生产环境部署讲解

欢迎加入我的知识星球,一起交流技术,免费学习猿天地的所有课程,包括这套Apollo

目前已经有20+课程了,后续还会更新下去。

Apollo:微服务架构下的配置管理的更多相关文章

  1. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  2. 微服务架构下分布式Session管理

    转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...

  3. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  4. 大规模微服务架构下的Service Mesh探索之路

    小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...

  5. 微服务架构下分布式事务解决方案——阿里GTS

    1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务 ...

  6. 【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试

    微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用.它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署.互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效 ...

  7. 杂谈微服务架构下SSO&OpenAPI访问的方案。

    本篇杂谈下微服务架构下WEB应用的浏览器与OpenAPI访问架构与方案.读者可对比传统架构下应用的此话话题的区别.或者有其它方案的欢迎交流

  8. 微服务架构下分布式事务解决方案——阿里云GTS

    https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这 ...

  9. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

随机推荐

  1. COMP 2406 – F19

    COMP 2406 – F19 – A4 Due Friday, November 22nd at 11:59 PMAssignment 4 Trivia Quiz BuilderSubmit a s ...

  2. Vue.js 源码分析(二十五) 高级应用 插槽 详解

    我们定义一个组件的时候,可以在组件的某个节点内预留一个位置,当父组件调用该组件的时候可以指定该位置具体的内容,这就是插槽的用法,子组件模板可以通过slot标签(插槽)规定对应的内容放置在哪里,比如: ...

  3. vue的双向绑定原理浅析与简单实现

    很久之前看过vue的一些原理,对其中的双向绑定原理也有一定程度上的了解,只是最近才在项目上使用vue,这才决定好好了解下vue的实现原理,因此这里对vue的双向绑定原理进行浅析,并做一个简单的实现. ...

  4. 一些优秀的 Entity Framework 开源项目

    增加全局过滤的项目(比如:IsDeleted 字段):https://github.com/zzzprojects/EntityFramework.DynamicFilters 谢谢浏览!

  5. MySQL 8.0.18安装教程(windows 64位)

    目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件3-初始化MySQL4-安装MySQL服务 + 启动MySQL 服务5-连接MySQL + 修改密码 * 第一项 ...

  6. 先排序然后union all失效,mysql数据库多个表union all查询并排序的结果为什么错误

    mysql数据库多个表union all查询并排序的结果为什么错误? 群主,我想进行一个表的查询,先把表中某个字段的内容查出,然后其他的再排序,我用union all连接两个表的查询结果排序是错的 比 ...

  7. flux架构的详细介绍和使用!

    结构分为四个 视图 view动作 action派发器 dispatcher数据商店 store 流程: 用户操作视图 视图(view)发送动作(action)到派发器(dispatcher) 由派发器 ...

  8. 想入门Web安全,这些基础知识都学会了吗?

    毕业季已经正式告一段落,这届毕业生都找到心仪的工作了吗? 正在实习期或者试用期的职场新人,是否在岗位上做的风生水起? 工作了一两年,从未升职加薪的菜鸟,还愿意继续原地踏步吗? 在校学生.IT从业者.毕 ...

  9. composer基本操作详解

    原文转自微信公众号:qq1005349393 Composer介绍 Composer 是 PHP 的一个包依赖管理工具.我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库 ...

  10. seafile部署安装

    安装epel源 yum install epel-release -y 安装docker yum install -y docker service docker start systemctl en ...