携程阿波罗(apollo)分布式配置中心
携程阿波罗(apollo)分布式配置中心
前言
可以使一个springboot项目在不使用微服务架构中其它组件的前提下单独使用的分布式配置中心,集中管理系统的配置,相比于nacos的配置中心apollo更加适合公司级别的配置中心,因为提供了用户模块与权限模块所以适用于大团队多系统的配置统一管理场景
官网:https://github.com/apolloconfig/apollo
中文文档:https://www.apolloconfig.com/#/zh/usage/java-sdk-user-guide?id=二、maven-dependency
1.部署服务中心
部署前提:java运行环境,mysql环境
注意:不支持部署在windows环境中
部署方式:
- 单独部署
- 1.mysql建表
- 2.修改apollo的数据库连接,在demo.sh文件中
- docker部署
2.SpringBoot集成
1.项目工程pom中引入核心依赖
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>
2.在配置文件(application.properties)中添加apollo相关配置
# apollo集成
# apollo 配置应用的 appid
app.id=test
# apollo meta-server地址,一般同config-server地址
#当前环境服务配置地址,生产环境建议至少双节点,可以填写多个逗号分隔,使用一个单独的域,如 http://config.xxx.com(由nginx等软件负载平衡器支持),而不是多个IP地址,因为服务器可能会扩展或缩小。
apollo.meta=http://10.0.0.220:8080
#启用apollo配置开关
apollo.bootstrap.enabled=true
#将Apollo配置加载提到初始化日志系统之前
apollo.bootstrap.eagerLoad.enabled=true
# apollo 使用配置的命名空间,多个以逗号分隔(ps:启动系统时使用的配置命名空间,可配置启动属性例如端口号,上下文路径等等)
apollo.bootstrap.namespaces = application.properties
3.java代码中读取apollo配置的几种写法
1.通过@Configuration和@Value注解的方式,此种方式发布配置会自动刷新
@Configuration
public class JavaConfigBean1 {
@Value("${timeout:20}")
private int timeout;
public int getTimeout() {
return timeout;
}
}
2.使用@ConfigurationProperties读取,此种方式发布配置不会自动刷新
@Configuration
@ConfigurationProperties(prefix = "xx")
public class JavaConfigBean2 {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.使用@ApolloConfig读取,此种方式发布配置会自动刷新
@ApolloConfig
private Config config;
@GetMapping("/test3")
public String test3(){
Set <String> propertyNames = config.getPropertyNames();
propertyNames.forEach(key -> {
System.err.println(key+"="+config.getIntProperty(key,0));
});
return propertyNames.toString();
}
4.使用@ApolloJsonValue读取,此种方式会自动刷新
@ApolloJsonValue("${jsonBeanProperty:[]}")
private List<User> anotherJsonBeans;
@GetMapping("/test4")
public void test4(){
anotherJsonBeans.forEach(item -> {
System.err.println(item.getUsername()+"--"+item.getPassword());
});
}
自动刷新就是改了配置中心的配置可以不用重启服务,常用的使用方式就以上这些,当然还有一些复杂的使用方式,比如动态数据源等实现方式可以看官方的demo
3.demo地址
https://gitee.com/a_seagull/spring-boot-exercise/tree/master/24.apollo-config