现在有个需求,通过定时任务发送邮件,一次定时任务大概是1000-2000个邮件需要发送,需要发送的邮件事先在一个日志表内生成了相关记录,现在定时任务使用线程池发送邮件,怎么样保证当前定时任务未执行完,下次定时任务指定仍能保证线程安全呢?不使用Redis的情况有什么解决方案吗?请求大神能给个方案呀!
日志表加一个状态,待处理0,处理失败-1,处理中1,完成2,每次定时任务执行的时候只扫描0和-1的,获取2000条数据,并将这2000条数据的状态改为1,提交数据库事务,然后另起一个事务去发送邮件,然后将发送完成的数据状态改为2,发送失败的状态改为-1(改状态操作最好放到tra-catch-finally里的finally块里)。