参考于:https://blog.csdn.net/Youth_lql/article/details/111885323?spm=1001.2014.3001.5501
Apollo是携程的开源项目,它是分布式配置中心,能够集中化管理应用的不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
Apollo相关链接
文档地址:https://www.apolloconfig.com/#/zh/
下载地址:https://github.com/apolloconfig/apollo
Apollo一共三个包:apollo-portal-2.1.0、apollo-configservice-2.1.0、apollo-adminservice-2.1.0
但是本教程使用Windows-Quick-Start版本,去Github下载即可,没有发行包,但是git pull 就是编译过的版本哦!https://github.com/apolloconfig/apollo-quick-start
Apollo运行前置要求
官方教程:https://www.apolloconfig.com/#/zh/deployment/quick-start
2.0版本Apollo环境要求:JAVA8 、MySQL5.6.5以上
1.0版本Apollo要求JAVA7、MySQL5.6以上
创建2个数据库ApolloPortalDB
和ApolloConfigDB
给服务端使用,其中SQL脚本在:https://github.com/apolloconfig/apollo-quick-start/tree/master/sql
分别导入相应的SQL文件到数据库即可。
对了 还需要安装git bash。不然在Windows环境无法模拟Linux命令执行。这个一般安装git就有了。
Apollo启动
1、修改MySQL配置文件 文件在demo.sh中
你也可以完全替换 将下文:${APOLLO_CONFIG_DB_USERNAME:-你的DB账号} 完全换成比如 root。为啥要保留-前面的内容呢,是因为脚本启动的时候可以指定参数。但是我们不需要指定参数。我们就在配置文件写死。将来启动的时候 直接 xxx.sh start 即可完事,停止的时候直接 xxx.sh stop
# apollo config db info
apollo_config_db_url=${APOLLO_CONFIG_DB_URL:-"jdbc:mysql://localhost:43306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"}
apollo_config_db_username=${APOLLO_CONFIG_DB_USERNAME:-你的DB账号}
apollo_config_db_password=${APOLLO_CONFIG_DB_PASSWORD:-你的DB密码}
# apollo portal db info
apollo_portal_db_url=${APOLLO_PORTAL_DB_URL:-"jdbc:mysql://localhost:43306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"}
apollo_portal_db_username=${APOLLO_PORTAL_DB_USERNAME:-你的DB账号}
apollo_portal_db_password=${APOLLO_PORTAL_DB_PASSWORD:-你的DB密码}
实际还有一点,这一点很多网上都没有说明。如果你电脑装了虚拟机。你用过脚本启动Apollo后,Eureka的ipAddr是错误的。你的Eureka注册中的需要追加参数:-Deureka.instance.ip-address
BASE_JAVA_OPTS="$JAVA_OPTS -Denv=dev -Deureka.instance.ip-address=你要使用的IP"
Apollo-Config项目会启动一个Eureka:端口8080。真实的Apollo管理页面端口是8070。未来我们在配置文件中,就是使用8080端口。
访问:127.0.0.1:8070 默认账号apollo ,密码是admin
登录后效果如下:
1、创建部门
添加一个json 为:
[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"},{"orgId":"study","orgName":"学习嘿嘿"}]
创建应用
进入我们刚才创建的应用
创建一个配置
发布配置
SpringBoot代码接入
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>
Apollo启动参数需要我们去指定环境
方式一:启动参数填写
-Denv=dev
方式二:main方法第一行添加
System.setProperty("env","DEV");
填写配置文件
Apollo客户端依赖于AppId
,Apollo Meta Server
等环境信息来工作
# 指定你穿件的appid
app.id=study001
# 指定你的apollo的地址
apollo.meta=http://192.168.2.104:8080
apollo.bootstrap.enabled=true
apollo.bootstrap.cluster=default
apollo.bootstrap.namespaces=application
# 指定apollo缓存文件夹名称,默认会在target统计文件夹名称 Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
apollo.cacheDir=apollo-cache-dir
启动类注解
注意@EnableApolloConfig
要和@Configuration
一起使用,不然不会生效。 但是我测试似乎没加也没毛病,但是最好加一下。
@EnableApolloConfig // 开启apollo配置
使用值
@Value
// Apollo重连有效后,就会恢复配置的值!
@Value("${username:我是默认值,只有Apoolo不可达,以及没缓存的时候,才是我}")
public String username;
配置文件使用Demo
ageKey=${ApolloKey:"如果Apollo没有,就用我当默认值"}
总结:使用值有2种方式:配置文件如果有的值,@Value如果在Apollo拿不到就会先用配置文件的值,如果Apollo发布了,就会替换了配置文件的值!
Apollo真实案例
场景:我们有个请求电信接口的需求。电信有多个环境,我们Java代码写的逻辑是Base_Host + API_Route。这样就会有个问题,在切换环境的时候,只想切换Base_Host。所以就得需要一个监听器,监听到某个Key的变化。然后就有了操作代码的入口。解决方案就是:
@ApolloConfigChangeListener(“NameSpace”)
NameSpace一般都叫application
@ApolloConfigChangeListener("application")
public void changeConfig(ConfigChangeEvent changeEvent){
System.out.println("Apollo配置文件发送变动了!");
ConfigChange change = changeEvent.getChange("base.host");
if (Objects.nonNull(change)){
Base_Host_inConfig = change.getNewValue(); // 替换新的配置值
setBaseHost(); // 调用此方法替换其他BaseHost。这样就实现了动态切换环境了
}
}
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤