钩子类扩展点介绍
包括以下四个Hook接口
- org.apache.shardingsphere.underlying.common.hook.RootInvokeHook
- org.apache.shardingsphere.sql.parser.hook.ParsingHook
- org.apache.shardingsphere.underlying.route.hook.RoutingHook
- org.apache.shardingsphere.underlying.executor.hook.SQLExecutionHook
钩子扩展点主要包括四个方法
- start
- finish(仅RootInvokeHook含有)
- finishSuccess
- finishFailure
钩子类扩展点的主要作用是收集SQL解析和执行阶段的核心相关数据,并上报给性能监控系统用于分布式系统的性能诊断,我们可以在路由、解析、执行等阶段获取SQL语句以及SQL转换状态信息。
执行流程
当ORM框架将具体逻辑SQL交由ShardingJDBC处理时,会依次经历以下流程(仅展示Hook流程)
以ParsingHook为例
- 在start阶段,可以获取在解析前的逻辑SQL语句;
- 在finishSuccess阶段,根据SQL类型可以获取逻辑SQL解析结果,包括逻辑表名,where条件,插入列值等
- 如果解析失败,则在finishFailure中获取解析异常信息。
加载及应用
加载
使用Java SPI机制,采用接口声明+策略模式+配置文件结合的方式,只需在META-INF/services目录下定义接口全限定名文件,并在文件中添加实现类即可。
应用
可在SQL执行的各个阶段对SQL状态进行监控,如:
- 同一线程执行多个SQL,检查第一个执行的SQL逻辑表是否符合业务配置(需配合线程变量ThreadLocal);
- 对执行SQL在各个阶段的状态进行上报。
|