代码拉取完成,页面将自动刷新
东西是从一个依赖canal同步mysql到es的服务里拿出来的
用的时候canal刚推出同步es的方案,但是那个sql写复杂了就出问题(我的问题)
那就直接监听binlog看表数据变动就好了,如果相关文档(数据)依赖的原始数据变动,就根据key更新这个文档(数据)为最新数据
@EnableSyncListener
public class XXApplication { }
@Service
public class BookInfoIndexSyncTrigger {
@SyncListener(table = {"book_info"}, type = EventType.UPDATE)
public void updateBookInfo(long bookId) {
logger.info("更新同步book_info..." + bookId);
syncService.syncBookInfoIndexById(bookId);
}
}
@Service
public class BookBaseInfoIndexSyncTrigger {
@SyncListener(table = {"book_isbn_info"}, type = EventType.ALL, key = {"book_id"})
public void updateBookInfoFromIsbn(long bookId) {
logger.info("ALL 非主表批量同步book_isbn_info..." + bookId);
syncService.syncBookInfoIndexById(bookId);
}
}
该功能依赖于执行前将RowData加入了上下文,但是不一定转换成Map放入上下文
若为DELETE监听器,则加入变更前数据到Map(该Map的key为字段名,value为字段值),则getCurrentDataAfter方法返回值为空
若为INSERT\UPDATE监听器,则加入变更后文档到Map,则getCurrentDataBefore方法返回值为空
- 获取当前默认加载文档类型(true则为变更前文档,false则变更后文档)
SyncContext.getCurrentIsDataBefore();
- 直接获取RowData
SyncContext.getCurrentRowData();
- 获取文档变更前记录Map(若未加载则返回值为空)
SyncContext.getCurrentDataBefore();
- 获取文档变更后记录Map(若未加载则返回值为空)
SyncContext.getCurrentDataAfter();
- 获取变更前字段值(若未加载则返回值为空)
SyncContext.getBeforeParam(field, clazz)
- 获取变更后字段值(若未加载则返回值为空)
SyncContext.getAfterParam(field, clazz)
- 根据默认加载文档类型获取参数
SyncContext.getParam(field, clazz)
以下方法不会为null,如果是未加载过的数据会加载后取出返回
canal:
sync: false
canal:
# 是否使用dubbo的zookeeper集群配置,如果为true则下面的host,port节点配置将失效,会读取dubbo.registry.address信息,默认fasle
enable: true
host: 127.0.0.1
port: 11111
destination: example
username:
password:
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
canal 1.1.3
download: https://github.com/alibaba/canal/releases
canal.instance.filter.regex=test_lib\\..*
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。