apollo
apollo是一个分布式配置中心(其实也是一个微服务项目)。
原理就是把配置文件中的key,value的值存到Apollo中,然后项目启动的时候从Apollo中读取
1、为什么使用apollo
在我们开发分布式微服务项目的时候,那些配置一旦变更,就需要重启服务,这样非常不友好。因此我们考虑动态更改配置文件当中的配置,所以把那些配置全部存放在apollo当中,这样就能达到动态的效果,并且不用重启服务。
2、主要功能
- 能够集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
生产环境、预览环境、测试环境、开发环境
- 用户在 Apollo 修改完配置并发布后,客户端能实时(1s)接收到最新的配置,并通知到应用程序。
- 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚。
- 支持配置的灰度发布,比如点击发布后,只对部分应用实例生效,等观察一段时间,确定没问题后再推给所有应用实例。
- 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为编辑和发布两个环节,从而减少人为的错误。所有的操作都有审计日志,方便追踪问题。
- apollo 出于通用性考虑,对配置的修改不会做过多限制,只要符合基本的格式就能够保存,可能有xml、json等格式。
3、Springboot集成apollo
(1)添加apollo依赖
(2)在yml中配置apollo
apollo.meta: Apollo 配置中心地址
apollo.bootstrap.enabled:是否开启 Apollo
apollo.cluster: 指定使用某个集群下的配置
apollo.autoUpdateInjectedSpringProperties: Spring应用通常会使用 Placeholder 来注入配置,如${someKey:someDefaultValue},冒号前面的是 key,冒号后面的是默认值。如果想关闭 placeholder 在运行时自动更新功能,可以设置为 false
apollo.appid:项目名称
apollo.environment:生产环境、预览环境、测试环境、开发环境
(3)在springboot启动类中添加注解@EnableApolloConfig
(4)使用apollo中配置的值
- 使用@Value(key)注解:
@Value("${test-data}")
- 使用@ApolloConfig注解
@ApolloConfig
private Config testConfig;
String property = testConfig.getProperty(key, null);