任务调度 Quartz

2024-06-14 12:38

Quartz概念

image.png

Quartz运行环境

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.3.2</version>
        </dependency>


public class MyJobTest implements Job {

    public MyJobTest() {
    }

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("execute job");
    }
}
public class QuartzTest {
    public static void main(String[] args) {
        try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();

            JobDetail job = newJob(MyJobTest.class).withIdentity("job1","group1").build();
            Trigger trigger = newTrigger()
                    .withIdentity("trigger1", "group1")
                    .startNow()
                    .withSchedule(simpleSchedule()
                            .withIntervalInSeconds(40)
                            .repeatForever())
                    .build();
            scheduler.scheduleJob(job, trigger);
            Thread.sleep(100000);
            scheduler.shutdown();
        } catch (SchedulerException e) {
            //
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

Quartz的设计模式

  • ### Builder模式


    • JobDetail job = newJob(HelloJob.class)
            .withIdentity("job1", "group1")
            .build();
      
        // Trigger the job to run now, and then repeat every 40 seconds
        Trigger trigger = newTrigger()
            .withIdentity("trigger1", "group1")
            .startNow()
                  .withSchedule(simpleSchedule()
                    .withIntervalInSeconds(40)
                    .repeatForever())            
            .build();
      
        // Tell quartz to schedule the job using our trigger
        scheduler.scheduleJob(job, trigger);

  • ### Factory模式


    • public class QuartzTest {
      
            public static void main(String[] args) {
      
                try {
                    // Grab the Scheduler instance from the Factory
                    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
      
                    // and start it off
                    scheduler.start();
      
                    scheduler.shutdown();
      
                } catch (SchedulerException se) {
                    se.printStackTrace();
                }
            }
        }

Quart的体系结构

image.png

Quartz的几个常用API

image.png

Maven依赖包

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
   <groupId>org.quartz-scheduler</groupId>
   <artifactId>quartz</artifactId>
   <version>2.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz-jobs</artifactId>
      <version>2.3.2</version>
</dependency>

入门案例

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //输出当前时间的任务
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH24:mm:ss");
        String dateString=df.format(date);
        System.out.println("输出:"+dateString);
    }
}
#######################################################

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

public class HelloScheduler {
    public static void main(String[] args) throws SchedulerException {
        //1.创建调度器(scheduler)
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        //2.任务实例(JobDetail)
        JobDetail job1 = newJob(HelloJob.class)
                .withIdentity("job1", "group1")
                .build();

        //3.触发器(Trigger)
        // Trigger the job to run now, and then repeat every 40 seconds
        Trigger trigger = newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(40)
                        .repeatForever())
                .build();
        //任务关联
        scheduler.scheduleJob(job1,trigger);

        scheduler.start();
    }
}


相关新闻