任务调度总结

任务调度总结

1.定时任务概述

在项目的开发当中有三种方式来解决定时任务,分别是JDK自带的Timer,Spring Task和第三方组件Quartz.
三者的特点为Timer为JDK自带的,简单易用,但是满足不了复杂的情况,所以很少使用。Spring Task 使用简单,支持注解和配置文件两种格式。Quartz功能强大但是笨重

2.JDK实现任务调度

/**
 * 基于jdk的任务调度
 */
public class JdkTaskDemo {
    public static void main(String[] args) {
        //创建定时类
        Timer timer = new Timer();
        //创建任务类
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("定时任务执行了......"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
        };
        //执行定时任务
        timer.schedule(task,new Date(),2000);
    }
}

3.Spring-task实现任务调度

3.1 入门案例
使用Spring-task不需要任何另外的依赖,只需要导入
spring-boot-starter-web即可
在启动类当中打开任务调度注解即可

@SpringBootApplication
@EnableScheduling
public class TaskStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(TaskStudyApplication.class, args);
    }
}

3.2 Cron表达式
关于 cronExpression 表达式有至少 6 个(也可能是 7 个)由空格分隔的时间元素。从左至右,这些元素的定义如下:

​ 1.秒(0–59)

​ 2.分钟(0–59)

​ 3.小时(0–23)

​ 4.月份中的日期(1–31)

​ 5.月份(1–12 或 JAN–DEC)

​ 6.星期中的日期(1–7 或 SUN–SAT)

​ 7.年份(1970–2099)

0 0 10,14,16 * * ? 
    
每天上午 10,下午 2 点和下午 4

4.Quartz

4.1Quartz介绍
相较于Timer,Quartz增加了很多功能
持久性作业-就是保持调度定时的状态;
作业管理-对调度作业进行有效的管理;
Quartz的核心类有三个部分

  • 任务 Job : 需要实现的任务类,实现 execute() 方法,执行后完成任务。
  • 触发器 Trigger : 包括 SimpleTriggerCronTrigger
  • 调度器 Scheduler : 任务调度器,负责基于 Trigger触发器,来执行 Job任务。
    4.2案例
    需要导入相应的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

创建一个任务类

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("任务被执行了");
    }
}

创建调度器、jobDetail实例j和trigger实例

public class QuartzTest {
    public static void main(String[] args) throws SchedulerException {
        //1.创建任务调度器
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();

        //2.创建JobDetail实例,并与MyJob类绑定
        JobDetail job = JobBuilder.newJob(MyJob.class)
                //指定任务名,组名
                .withIdentity("job1","group1")
                .build();

        //3.构建Trigger实例,每隔3s执行一次
        Trigger trigger = TriggerBuilder.newTrigger()
                //指定触发器名字,组名
                .withIdentity("trigger1","group1")
                //从现在触发
                .startNow()
                //触发规则3s触发一次
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever())
                .build();

        //4.执行 开启任务调度器
        scheduler.scheduleJob(job,trigger);
        System.out.println(System.currentTimeMillis());
        scheduler.start();
    }
}
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值