quartz和SpringTask的优点和缺点及案例演示

一、优点和缺点

Spring task 优点:无需整合spring,作业类中就可以调用业务service 缺点:单线程;不能做数据存储型的定时任务 例演示 Quartz 优点:多线程;可以做数据存储型的定时任务,维护性高; 缺点:需要整合spring,不能直接调用业务层service;

二、线程论证代码

所需要的pom文件

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
</dependency>
<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>

1、spring自带的定时器 task包下springtask类

package com.chendongyang.quartz01.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

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

@Component
public class SpringTask {
          
   
    @Scheduled(cron = "0/10 * * * * ?")
    public void  xxx(){
          
   
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.err.println(format.format(new Date())+" : 这是一个spring task...");

        try {
          
   
            Thread.sleep(20*1000);
            System.out.println("模拟正在处理大数据....");
        } catch (InterruptedException e) {
          
   
            e.printStackTrace();
        }
    }
}

启动类里面添加注解: @EnableScheduling

2、quartz job包下添加

package com.chendongyang.quartz01.job;

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

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

public class RamJob2 implements Job {
          
   
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
          
   
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.err.println(format.format(new Date())+" : 基于RAM的quartz调度框架定时任务...");

        try {
          
   
            Thread.sleep(20*1000);
            System.out.println("模拟正在处理大数据....");
        } catch (InterruptedException e) {
          
   
            e.printStackTrace();
        }
    }
}

Demo5测试类

package com.chendongyang.quartz01.quartz;

import com.chendongyang.quartz01.job.RamJob2;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.newJob;

/**
 * @author 陈东阳
 * @site www.chendongyang.com
 * @company
 * @create  2019-11-14 9:33
 */
public class Demo5 {
          
   
    public static void main(String[] args) throws SchedulerException {
          
   
        SchedulerFactory factory = new StdSchedulerFactory();
//        调度器创建
        Scheduler scheduler = factory.getScheduler();

//        具体定时任务需要执行的代码
        JobDetail jobDetail = newJob(RamJob2.class)
                .withIdentity("job2", "group1")
                .withIdentity("这是一个作业类案例")
                .build();

        Trigger trigger = (Trigger) TriggerBuilder.newTrigger()
//                每10s执行一次
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
//                触发器标识
                .withIdentity("trigger2", "group1")
                .withDescription("这是一个触发器")
                .build();

//       调度工厂绑定作业类及触发器
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
    }
}

三、结果图

经验分享 程序员 微信小程序 职场和发展