摘要: 原创出处 「芋道源码」欢迎转载,保留摘要,谢谢!
本文主要基于 3.2.6 正式版
1. 概述
本文主要分享 存储组件。顾名思义,负责将调用链路、应用、应用实例等等信息存储到存储器,例如,ES 、H2 。
友情提示:建议先阅读 《 源码分析 —— 初始化》 ,以了解 组件体系。FROM
下面我们来看看整体的项目结构,如下图所示 :
下面,我们从接口到实现的顺序进行分享。
2. apm–core
apm–core 的 data 和 包,如下图所示:
我们对类进行梳理分类,如下图:
2.1 Table
org..apm..core.data. ,通用表。
在 — 的 table 包下,我们可以看到所有 Table 类,以 “Table” 结尾。每个 Table 的表名,在每个实现类里,例如 。
2.2
org..apm..core.data. ,表定义抽象类。
不同的存储组件实现,有不同的 实现类,如下图:
2.2.1
org..apm..core.data. ,字段定义抽象类。
在 –xxx- 模块中, 、efine 实现 。
2.2.2
涉及到的类如下图所示:
org..apm..core.data. ,调用 org..apm..core.. ,从 org..apm..core.data.e 中,加载 实现类数组。
另外,在 –es- 和 –h2- 里都有 . 文件,如下图:
代码比较简单,中文注释已加,胖友自己阅读理解下。
2.3 Data
org..apm..core.data.Data ,数据抽象类。
在 — 的 table 包下,我们可以看到所有 Data 类,非 “Table” 结尾,例如 。
2.3.1
org..apm..core.data. ,字段。
2.3.2
org..apm..core.data. ,操作接口。用于两个值之间的操作,例如,相加等等。目前实现类有:
3. —
— :定义存储组件接口。项目结构如下 :
3.1
org..apm… ,实现 抽象类,集群管理 。
#name() 实现方法,返回模块名为 “” 。
#() 实现方法,返回 类名:在 org..apm…dao 包下的所有类 和 。
3.2 table 包
在 org..apm…table 包下,定义了存储模块所有的 Table 和 Data 实现类。
3.3
org..apm… ,存储安装器抽象类,基于 ,初始化存储组件的表。
3.4 dao 包
在 — 项目结构图,我们看到一共有两个 bao 包:
3.4.1 系统 DAO
org..apm…base.dao.DAO ,继承 接口,DAO 接口。
无任何方法。
3.4.1.1
org..apm…base.dao. ,实现 DAO 接口,DAO 抽象基类。
在 –xxx- 模块中,H2DAO 、EsDAO 实现 。
3.4.1.2
org..apm…base.dao. ,实现 DAO 接口,持久化 DAO 接口,定义了 Data 的增删改查操作。
3.4.1.3
org..apm…base.dao. ,实现 DAO 接口,批量操作 DAO 接口。
在 –xxx- 模块中, 、 实现 。
3.4.2 业务 DAO
在 #() 方法里,我们可以看到,业务 DAO 按照用途可以拆分成四种:
那么整理如下:
/ I关联文章√
√√√
√
√√
√√
√√
√√
√√
nce
√√
√√
√√
√√
√√
√√
√√
√√
4. –h2-
–h2- ,基于 H2 的存储组件实现。项目结构如下 :
该实现是单机版,建议仅用于 快速上手,生产环境不建议使用。
由于生产环境主要使用 ES 的存储组件实现,所以本文暂不解析相关实现,感兴趣的胖友自己嗨起来。
5. –es-
–es-crm系统java源代码,基于 ES 的存储组件实现。项目结构如下 :
实际使用时,通过 .yml 配置如下:
storage: elasticsearch: cluster_name: elasticsearch cluster_transport_sniffer: true cluster_nodes: 127.0.0.1:9300 index_shards_number: 2 index_replicas_number: 0 ttl: 7
5.1 der
org..apm…es.der ,实现 抽象类,基于 ES 的存储组件服务提供者。
#name() 实现方法,返回组件服务提供者名为 “” 。
() 实现方法,返回组件类为 。
#() 实现方法,返回依赖组件为 “” 。
#() 实现方法,执行准备阶段逻辑。
#start() 实现方法,执行启动阶段逻辑。
#() 实现方法,执行启动完成逻辑。
5.2 包
在 –es- 项目结构图,我们看到一共有两个 包:
5.2.1 fine
org..apm…es.base..fine ,实现 接口,基于 的表定义抽象类。
5.2.2 efine
org..apm…es.base..efine ,实现 抽象类,基于 ES 的字段定义。
5.2.3 业务 实现类
在 org…apm…es. 包里,我们可以看到,所有基于 ES 的业务 实现类。例如:fine 。
整体 #() 方法返回的结果如下:
5.2.4
友情提示: 主要是对 Java API 的使用,所以不熟悉的胖友crm系统java源代码,可以 下。
org..apm…es.base.. ,实现 抽象类, 基于 ES 存储安装器实现类。
5.3 dao 包
在 –es- 项目结构图,我们看到一共有两个 dao 包:
5.3.1 EsDAO
org..apm…es.base.dao.EsDAO ,实现 抽象类,基于 ES 的 DAO 抽象类。
5.3.2
org..apm…es.base.dao. ,实现 接口,继承 EsDAO 抽象类,基于 ES 批量操作 DAO 实现类。
5.3.3 业务 DAO 实现类
在 org…apm…es.dao 包里,我们可以看到,所有基于 ES 的业务 DAO 实现类。
实现代码易懂,胖友可以自己阅读。良心如我们,按照 DAO 的业务用途,推荐例子如下:
5.4
org..apm…es. ,过期数据删除定时器。通过该定时器,只保留 N 天内的数据。
如下是不会删除的数据的表:
:-D 搜索微信号(ID:芋道源码),可以获得各种 Java 源码解析、原理讲解、面试题、学习指南。
:-D 并且,回复【书籍】后,可以领取笔者推荐的各种 Java 从入门到架构的 100 本书籍。
来吧,骚年~
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请添加站长微信举报,一经查实,本站将立刻删除。
如若转载,请注明出处:http://www.ibjoo.com/8264.html