一、问题描述
工作中遇到这样一个场景,数据库有很多数据,我们用Quartz定期扫表获取信息,然后对数据进行处理;
举例来说:
表A
userCode | TransNo | ProductCode | beginDate |
---|---|---|---|
出单账号 | 流水号 | 产品代码 | 购买日期 |
我需要根据userCode/productCode/beginDate筛选出尽量多的数据,然后一次性对数据进行统一处理;
我们有十几台服务器在运行,所以同一时间也会起十几个定时任务去数据表中获取数据,怎么保证某条数据不会被多台服务器重复处理?
二、解决过程
方式1、先更新查询
最初我考虑在表里加一个字段,状态标签statuTab,用于选定数据,先update一个随机数到statusTab,然后再把数据查询出来
先更新
update A set statusTab = ‘201905290933afk’ where userCode=‘A’ and productCode=‘B’ and beginDate=‘20190529’ and statusTab is null;
后查询
select * from A where statusTab=‘201905290933afk’;
这样只要随机标签statusTab不同,基本上两台机器的Quartz就不会选中相同的任务;
方式1问题
有同