当前位置: 首页 > 图灵资讯 > 技术篇> 服务器集群下,如何控制若依框架下定时任务重复执行

服务器集群下,如何控制若依框架下定时任务重复执行

来源:图灵教育
时间:2023-05-24 09:31:41

如果我使用框架,由于业务需要,我需要在集群服务器上部署它。在测试过程中,我发现定期任务被重复执行。集群服务器共享相同的redis服务器,因此通过redislock锁实现,定期任务只执行一次。

// 这里使用Resourcece 为解决黄叹号提示@Resourceprivate RedisLock redisLock; public void task(){// 获取方法名称--> 该方法要求同类定时任务名称一致        // 若不一致,可使用 自定义ID 来解决        String timerName = this.getClass().getName()+Thread.currentThread() .getStackTrace()[1].getMethodName();        // 这里的定时任务是每小时判断一次  单位是秒        if(redisLock.requireLock(timerName,3600)){            return;        } }  //自定义 RedisLock @Componentpublic class RedisLock {    public final static String MOGUDING_TIMER_LOCK_KEY = "test:lock:lock:";    /**     *     */    @Resource    private RedisTemplate<String, Object> redisTemplate;    /**     * 判断是否有锁 有:true ;否: false     * @param lockName     * @param expire 有效时间;单位:秒[不是毫秒]     * @return boolean     */    public boolean requireLock(String lockName,long expire){        String key = MOGUDING_TIMER_LOCK_KEY+lockName;        if(redisTemplate.opsForValue().getAndSet(key,"1")==null){            redisTemplate.expire(key,expire, TimeUnit.SECONDS);            return false;        }else {            return true;        }    }}这样,如果按照框架定时任务重复执行,就可以简单地解决问题