Otter源代码解析(七)
?注意这里的OtterExtractorFactory与OtterExtractor并不是选择一个合适的Extractor处理,而是搭建成一个职责链(但设计上并不完全是,个人觉得设计成职责链更合适一些),每个Extractor顺序处理。其中的DatabaseExtractor由于会做数据库反查会比较耗时,所以内部使用线程池做了并发优化。 因而做成一个池化的对象(池化的说明参见最开始的解释),所以并不是单例的Bean。其他的Extractor都是单例的。
?
请原谅,水平有限,暂时还没弄懂GroupExtractor是做什么用的,搞清楚之后会更新文档。
1 楼 agapple 2013-09-18 GroupExtractor字面意思就是组. 在otter内部使用主要解决两类需求:1. 文件同步. 一条记录对应的图片,可能会有一个或者多个字段,比如会有image_path,image_version来决定图片,所以我们可以定义这两个字段为一组,只要满足组内任意一个字段的变更,就会认为需要文件同步.
2. 数据上的组同步,比如国家,省份,城市,可能在数据库为三个字段. 如果是双A同步,两地同时修改这些字段,但业务上可能在A地修改了国家为美国,在B地修改为省份为浙江,然后一同步,最终就会变成美国,浙江这样的情况. 这种情况可以通过group来解决,将国家,省份,城市做一个group,组内任何一个字段发生了变更,其余字段会做为整体一起变更.