spring中定时任务汇总

1.直接使用注解@Scheduled

@Slf4j
@Component
@EnableAsync
@EnableScheduling
public class HelloScheduled {
/**
 * 1、在Spring中表达式是6位组成,不允许第七位的年份
 * 2、在周几的的位置,1-7代表周一到周日
 * 3、定时任务不该阻塞。默认是阻塞的
 *      1)、可以让业务以异步的方式,自己提交到线程池
 *              CompletableFuture.runAsync(() -> {
 *         },execute);
 *
 *      2)、支持定时任务线程池;设置 TaskSchedulingProperties
 *        spring.task.scheduling.pool.size: 5
 *
 *      3)、让定时任务异步执行
 *          异步任务
 *
 *      解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能
 *
 */
 @Async
 @Scheduled(cron = "*/1 * * * * ?")
 public void hello() {
     log.info("hello...");
     try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }

 }
}

2.ThreadPoolTaskScheduler

public class ThreadPoolTaskDemo {

    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
    private ScheduledFuture<?> scheduledFuture;
    @Value("*/5 * * * * ?")
    private String crontime;

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }


    @PostConstruct
    public void start(){
        scheduledFuture = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                log.info("定时任务开始*********");
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {

                //CronTrigger动态设置下次执行时间
                return new CronTrigger(crontime).nextExecutionTime(triggerContext);
            }
        });
    }



    public void stopcron(){
        if(scheduledFuture != null) {
            scheduledFuture.cancel(true);
            scheduledFuture = null;
        }
    }

}

第一步:实例化ThreadPoolTaskScheduler对象

@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> scheduledFuture;

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
    return new ThreadPoolTaskScheduler();
}

第二步:执行任务调度

scheduledFuture = threadPoolTaskScheduler.schedule(new Runnable() {
    @Override
    public void run() {
        // 逻辑处理...
    }
}, new Trigger() {
    @Override
    public Date nextExecutionTime(TriggerContext triggerContext) {

     //CronTrigger动态设置下次执行时间
        return new CronTrigger("crontime").nextExecutionTime(triggerContext);
    }
});

第三步:关闭任务调度

if (scheduledFuture != null) {
    scheduledFuture.cancel(true);
    scheduledFuture = null;
}

3.xxl job

gitee上地址:

xxl-job 发行版 - Gitee.com

大体的流程是 1.执行SQL创建对应库 2.启动服务端 3.启动客户端

gitee上文档写到很详细了

posted @ 2022-07-07 17:03  yorkiiz  阅读(356)  评论(0编辑  收藏  举报