SchedulingConfigurer定时任务及多线程

启动类加@EnableScheduling注解

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.integration.redis.util.RedisLockRegistry;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;


@Service
@Slf4j
@AllArgsConstructor
public class TestClass implements SchedulingConfigurer {

    private static String test_cron;

    private RedisLockRegistry redisLockRegistry;



    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        test_cron= (String) getProperty("test_cron");
        //设定一个长度为5的定时任务线程池
        taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
        Trigger trigger = triggerContext -> {
            test_cron= (String) getProperty("test_cron");
            if ("0".equals(test_cron)||test_cron==null){
                test_cron= "0 */1 * * * ?";
            }
            CronTrigger trigger1 = new CronTrigger(test_cron);
            return trigger1.nextExecutionTime(triggerContext);
        };
       
        taskRegistrar.addTriggerTask(() -> {
            if ("0".equals(test_cron)){
                return;
            }//检查是否为0  如果是则跳过
            Lock lock = redisLockRegistry.obtain("grabTask-lock");//分布式锁  获取锁
            try{
                boolean b1 = lock.tryLock(3, TimeUnit.SECONDS);//尝试加锁  如果加锁失败则跳过
                if (!b1){
                    log.info("无法加锁grabTask-lock");
                    return;
                }
        //do sth } }
catch (Exception ex){ log.error("grabTask",ex); } } }catch(Exception ex){ log.error("grabTask",ex); }finally { try{ lock.unlock(); }catch (IllegalStateException ex){ log.error("grabTask-lock锁已释放"); } } }, trigger); } }

 

posted @ 2022-07-08 14:15  DreamCatt  阅读(1454)  评论(0)    收藏  举报