快速了解Quartz(定时任务框架)

        Quartz主要用来执行定时任务

Quartz主要由3部分组成:

  1. JobDetail:任务(需要执行的任务)

  2. Trigger:触发器(满足条件触发,触发后调用任务)

  3. Scheduler:调度器(将触发器和任务相关联)

Quartz的使用

  1. 导入相关依赖

           <!-- Quartz的依赖项 -->
           <dependency>
               <groupId>org.quartz-scheduler</groupId>
               <artifactId>quartz</artifactId>
               <version>2.3.0</version>
           </dependency>
  2. 创建需要执行的业务逻辑类

    
    /**
    *具体要执行的业务逻辑类,需要实现Job接口
    */
    public class PrintWordsJob implements Job{
    
       @Override
       public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    
           //设置在控制台上输出的时间
           String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
           System.out.println("PrintWordsJob开始于:" + format + ",输出:Hello Job - " + new Random().nextInt(100));
       }
    }
  3. 创建Scheduler(调度器)

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

    public class MyScheduler {
       public static void main(String[] args) throws SchedulerException {
           //创建调度器Scheduler
           SchedulerFactory SchedulerFactory = new StdSchedulerFactory();
           Scheduler scheduler = SchedulerFactory.getScheduler();
           //创建任务实例JobDetail,并于PrintWordsJob类绑定
           JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                   .withIdentity("job1", "group1") //定义任务名称和组名称
                   .build();
       }
    }
  5. 创建Trigger(调度器)

    public class MyScheduler {
       public static void main(String[] args) throws SchedulerException {
           //创建调度器Scheduler
           SchedulerFactory SchedulerFactory = new StdSchedulerFactory();
           Scheduler scheduler = SchedulerFactory.getScheduler();
           //创建任务实例JobDetail,并于PrintWordsJob类绑定
           JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                   .withIdentity("job1", "group1")  //定义任务名称和组名称
                   .build();
    
           //定义触发器开始时间
           Date startDate = new Date();
           startDate.setTime(startDate.getTime());
           //定义触发器结束时间
           Date endDate = new Date();
           endDate.setTime(startDate.getTime() + 5000 * 10);
    
           //创建触发器Trigger
           Trigger trigger = TriggerBuilder.newTrigger()
                   .withIdentity("trigger1", "triggerGroup1")
                   .startNow() //立即执行
                   .startAt(startDate) //触发器触发后startDate秒开始
                   .endAt(endDate) //触发器开始后endDate秒结束
                   .withSchedule( //指定调度策略
                                   SimpleScheduleBuilder.simpleSchedule() //调度对象
                                   .withIntervalInSeconds(1) //每隔1s执行一次
                                   .repeatForever()) //永久执行
                   .build();
       }
    }
  6. Scheduler执行

    public class MyScheduler {
       public static void main(String[] args) throws SchedulerException {
           //创建调度器Scheduler
           SchedulerFactory SchedulerFactory = new StdSchedulerFactory();
           Scheduler scheduler = SchedulerFactory.getScheduler();
           //创建任务实例JobDetail,并于PrintWordsJob类绑定
           JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                   .withIdentity("job1", "group1")  //定义任务名称和组名称
                   .build();
    
           //定义触发器开始时间
           Date startDate = new Date();
           startDate.setTime(startDate.getTime());
           //定义触发器结束时间
           Date endDate = new Date();
           endDate.setTime(startDate.getTime() + 5000 * 10);
    
           //创建触发器Trigger
           Trigger trigger = TriggerBuilder.newTrigger()
                   .withIdentity("trigger1", "triggerGroup1")
                   .startNow() //立即执行
                   .startAt(startDate) //触发器触发后startDate秒开始
                   .endAt(endDate) //触发器开始后endDate秒结束
                   .withSchedule( //指定调度策略
                                   SimpleScheduleBuilder.simpleSchedule() //调度对象
                                   .withIntervalInSeconds(1) //每隔1s执行一次
                                   .repeatForever()) //永久执行
                   .build();
           //在调度器中安排jobDetail和trigger
           scheduler.scheduleJob(jobDetail, trigger);
    
           System.out.println("------调度器开始执行------");
           scheduler.start();
       }
    }
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值