前面我们一起交流了Apollo配置中心的基本原理以及各种环境的搭建,今天我们进行springboot整合Apollo实现集中化配置、自动化更新
应用场景
任何没有业务应用场景的技术都是纸上谈兵,先说说应用场景
随着现在微服务技术越来越火爆热门,越来越普及,当单体服务升级为集群或者微服务的时候,服务变多变复杂,相关的配置也会呈几何倍数增长
拿springboot举例,我们开发环境的时候,数据库参数、缓存各种参数都写在application配置文件中,测试、生产环境通过启动参数-Dspring.datasource....之类的进行指定。或者有些通过application-env配置文件进行不同环境的不同参数进行配置,在启动的时候指定当前运行环境-Dspring.profile.active=dev等。但是服务变多以后,配置参数的检查,更新将会是一个灾难性的场景,而且还不支持配置参数的热更新,修改参数后必须重新打包、重启应用。
所以在这种情况下,配置中心这种中间件应运而生,目前主流的有携程的Apollo、netflux的config、ali的nacos,今天我们主要讨论Apollo
应用整合
首先创建一个springboot应用,具体创建过程不是本文重点(略)
整合改造过程
1.修改pom添加Apollo依赖,以支持Apollo配置中心
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.4.0</version> </dependency>
2.填写Apollo信息配置
# 项目名称
app.id=${spring.application.name}
# Apollo配置中心地址
apollo.meta=http://localhost:8080
# 是否开启spring参数自动更新
apollo.autoUpdateInjectedSpringProperties=true
3.启动类上面添加注解
在启动类上加上apollo开启注解@EnableApolloConfig
4.创建配置项
项目改造完成以后,打开浏览器输入apollo控制台地址进行配置的管理
创建一个和刚才创建的应用同名的应用(配置中的spring.application.name),然后在里面新增一个配置(因为8080端口被apollo占用,所以增加一个服务绑定端口的配置)
test=9995 server.port=8085
然后在springboot中创建一个controller
@RestController public class HelloController { @Value("${test}") private String test; @GetMapping("hello") public Object say() { System.out.println(res); return "hello " + test; } }
5.启动程序,进行测试
启动程序后,打开浏览器访问http://localhost:8085/hello即可看到页面上显示的“hello 9995”
当我们在apollo上对这个参数进行修改test=555并发布后,再访问http://localhost:8085/hello即可看到页面上显示的“hello 555”
这样就实现了服务的集中化配置,以及自动化热更新