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();
}
}
