关于作业调度框架quartz的入门使用

  1. quartz的工作原理,涉及到三个对象,Scheduler,JobDetail,Trigger;

    Scheduler: 管理需要被调度任务的容器,它里面可以加入多个需要被调度的JobDetail。

    JobDetail: 具体的执行用户自定义的任务实体。

    Trigger: 对于任务调度的控制器,可以控制具体一个JobDetail执行的时间和次数。

  2. 项目里面使用maven引入quartz框架需要的相关jar包
    <!-- ===================== quartz-scheduler 定时任务=================== -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>2.2.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz-jobs</artifactId>
                <version>2.2.1</version>
            </dependency>
            <!-- =================== /quartz-scheduler 定时任务 =================== -->

  3. 自定义实现一个JobDetail的对象,需要实现 org.quartz.Job;  接口;
    <pre name="code" class="java">package org.hinsteny.quartz;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class BackUpJob implements Job {
    	
        public void execute(JobExecutionContext context) throws JobExecutionException{
            System.out.println("Hello!  HelloJob is executing.");
        }
    }

  4. 在自定义的JobManager实现上述自定义Job的调度,从scheduler.start()开始对任务的调度;
    package org.hinsteny.quartz;
    
    import static org.quartz.CronScheduleBuilder.dailyAtHourAndMinute;
    import static org.quartz.JobBuilder.newJob;
    import static org.quartz.TriggerBuilder.newTrigger;
    import static org.quartz.SimpleScheduleBuilder.*;
    
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.Trigger;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class BackupDBTask{
    
    
        private SchedulerFactory schedulerFactory;
        private Scheduler scheduler;
        
        
        public void startBackupTask(){
            schedulerFactory = new StdSchedulerFactory();
            try {
            	scheduler = schedulerFactory.getScheduler();
                JobDetail jobDetail = getJobDetail();
                Trigger trigger = getJobTrigger(jobDetail);
                scheduler.scheduleJob(jobDetail,trigger);
                
                //开始scheduler对任务进行调度
                scheduler.start();
    //            scheduler.shutdown();停止scheduler
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
        }
    
        private JobDetail getJobDetail(){
            return newJob(BackUpJob.class)
                    .withIdentity("BackUpJob", "groupone")
                    .build();
        }
    
        private Trigger getJobTrigger(JobDetail jobDetail){
            return newTrigger()
                    .withIdentity("trigger", "groupone")
                    .startNow() // start the job by now
    //                .withSchedule(dailyAtHourAndMinute(0, 0))
                    .withSchedule(simpleSchedule()
                            .withIntervalInSeconds(1)
                            .repeatForever()) 
                    .forJob(jobDetail)
                    .build();
        }
        
        public static void main(String[] args){
        	BackupDBTask dbTask = new BackupDBTask();
        	dbTask.startBackupTask();
        }
    }
    


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐