Spring Task 中集群带来的问题
Contents
问题
当多台Tomcat同时进行调度时,如果没有处理好并发的问题,就会出现本应只是执行一次的Task,执行了两次(比如修改DB)。
DB解决办法
在执行DB修改操作的方法上,添加上@Transactional
(即添加事务处理)。
如果想提高并发的话,减小事务锁的行数(这里是基于支持事务和行级锁的DB来说的,只支持全表锁的DB,可以忽略这行为),然后进行分批处理.
利用Redis的单线程处理机制
利用redis的单线程处理机制,实现类似*跨JVM锁*的功能。合理控制好大范围并发,局部顺序执行(减小锁的范围)。
注:DB的话,最好还是由DB自身的MVCC特性来保证.