深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?

摘要:
ApplicationContextInitializer接口是在spring容器刷新之前执行的回调函数。在ConfigurationApplicationContext#刷新之前,我们可以进一步设置或处理ConfigurationApplicationContext的实例。
入口

ApolloApplicationContextInitializer (它实现了 ApplicationContextInitializer接口,并重写了initialize方法)。

ApplicationContextInitializer简单介绍:
ApplicationContextInitializer是Spring框架原有的东西,这个类的主要作用就是在ConfigurableApplicationContext类型(或者子类型)的ApplicationContext做refresh之前,允许我们对ConfiurableApplicationContext的实例做进一步设置和处理。ApplicationContextInitializer接口是在spring容器刷新之前执行的一个回调函数。是在ConfigurableApplicationContext#refresh之前,允许我们对ConfigurableApplicationContext的实例做进一步的设置或者处理。

ApolloApplicationContextInitializer#initialize 初始化

主要做了一些初始化工作,其中本文要关注的就是这个ConfigService.getConfig(namespace)方法
深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第1张

getConfig(String namespace) 加载配置

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第2张

DefaultConfigManager#getConfig(String namespace) 加载配置

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第3张

DefaultConfigFactory#create(String namespace) 创建Config工厂

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第4张

DefaultConfigFactory#createLocalConfigRepository(String namespace) 创建本地配置文件Repository

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第5张

(☆)LocalFileConfigRepository(String namespace, ConfigRepository upstream) 构造函数设置本地配置文件缓存路径

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第6张

LocalFileConfigRepository#setLocalCacheDir(File baseDir, boolean syncImmediately) 设置路径

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第7张

LocalFileConfigRepository#checkLocalConfigCacheDir(File baseDir) 确认路径存在

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第8张

(☆)LocalFileConfigRepository#findLocalCacheDir() 拼接路径

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第9张

ClassLoaderUtil

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第10张

(☆)ConfigUtil#getDefaultLocalCacheDir() 获取默认路径

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第11张

(☆)ConfigUtil#getCustomizedCacheRoot() 三种方式获取用户自定义配置路径

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第12张

DefaultServerProvider#initialize()

深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?第13张

总结

Apollo获取本地配置文件缓存路径的流程

  1. 先获取自定义的路径,有优先顺序
  • 从系统属性中获取 System.getProperty("apollo.cacheDir")
  • 从系统环境变量中获取 Key为“APOLLO_CACHDIR”
  • 从服务配置文件中获取,根据操作系统不同,配置撰写的地址也不同。
    • SERVER_PROPERTIES_LINUX = "/opt/settings/server.properties";
    • SERVER_PROPERTIES_WINDOWS = "C:/opt/settings/server.properties";
  1. 如果从自定义方式没有获取到路径配置,则使用默认的路径前缀(根据操作系统不同,路径也不同)
    "C:optdata" , "/opt/data“

注意:在获取完路径后,Apollo会对路径做一定的处理。
1.在路径后加上一层路径,文件夹名称为当前应用AppId;
2.在上述路径后,Apollo还会加一层文件夹,名称为"/config-cache"。
所以,无论配置的路径是什么,最后两层文件夹一定是/{appId}/config-cache。

免责声明:文章转载自《深入理解Apollo核心机制之本地缓存——你知道Apollo把你的配置缓存到哪里了吗?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java调用摄像头NB-IoT移远BC95使用小结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

7.模块化封装Storage实现缓存数据持久化

1.模块化封装Storage实现缓存数据持久化 1.在src目录下新建目录model,在model目录下新建js文件取名storage.js var storage={ set(key,value){ // 设置为本地缓存方法 localStorage.setItem(key,JSON.stringify(valu...

shiro中用redis做session缓存

shiro中的cache和spring类似,有提供两个接口,使用者使用不同的实现来继承他们:   1.cache-实际进行缓存操作,如使用spring-data-redis操作   2.cacheManager-管理cahe实例,返回cache实例   3.SessionDAO-调用cache进行操作 项目中,我用的securityManager是Defa...

vue页面配置缓存,使页面跳转时填写的数据不丢失

1、项目文件配置App.vue的内容 <template> <div id="app"> <!--所有界面设置缓存--> <keep-alive> <router-view></router-view> </keep-alive>...

干货 | 10分钟玩转PWA

关于PWA PWA(Progressive Web App), 即渐进式web应用。PWA本质上是web应用,目的是通过多项新技术,在安全、性能、体验等方面给用户原生应用的体验。而且无需像原生应用那样繁琐的下载、安装、升级等操作。 这里解释下概念中的“渐进式”,意思是这个web应用还在不断地进步中。因为目前而言,PWA还没有成熟到一蹴而就的程度,想在安全、...

大型网站技术架构

一、使用缓存减轻数据库的压力,提升网站性能。二八定律,80%的业务访问集中在20%的数据上。 1.缓存在应用服务器上的本地缓存。(Session) 2.缓存在专门的分布式缓存服务器上的远程缓存。可以采用集群的方式,理论上可以做到无限扩充。(Redis、memcached等) 二、使用服务器集群改善网站的并发处理能力。 1.单一服务器无法满足需求时,不要企...

web性能优化--缓存

什么是缓存? 缓存(Web缓存)是指代理服务器和客户端本地磁盘保存的资源副本。当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。 缓存大致可以分为私有缓存和公有缓存。私有缓存只提供给单独用户使用,公有缓存可以多个用户都访问使用。除了使用浏览器和代理缓存,还有网关缓存、CDN、反向代理缓存和负载均衡器等部署在...