单机定时任务很好解决,可以使用引入quartz解决。对于多机分布式定时任务系统可以使用TBSchedule、elastic-job等框架解决。
本文要介绍的是在机器少任务少的情况下的解决方案。比如一个后台项目,只分配了两台服务器。不可能使用其中一台专门做定时任务服务器。
如何解决两机任务分配?
思路:在更新事务内,执行select操作谁先获得数据库锁谁先执行,执行完后把信号放到redis.
if(!redisUtil.exist(key)){ Test test =dao.select(“select * from t_test where id=1”); if(!redisUtil.exist(key)){ //do something ...
redisUtil.set(key, 1, time); } }