文章目录
- 简单maven项目配置
- 依赖配置
- 编写处理类
- 编写测试类
- Springboot 项目配置
- 依赖引入
- 编写任务具体处理类
- 编写配置类
- 注意事项
- 测试
简单maven项目配置
依赖配置
springboot项目中增加如下的quartz
依赖信息:
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version>
</dependency>
编写处理类
增加处理方法,作为定时任务调出处理器
,其代码如下所示:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;/*** 实现 Job 接口,重写 execute 方法*/
public class QuartzDemo implements Job {/*** 具体执行任务调度的逻辑* @param jobExecutionContext* @throws JobExecutionException*/@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("6666666");}
}
如果需要对其增加Springboot
的事务处理
,只需要将其交给Spring
管理,或者采取构造注入
方式即可。
编写测试类
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;import java.util.Date;/*** quartz-job 的测试类*/
public class Test {public static void main(String[] args) throws SchedulerException {// 1、创建 scheduled 工厂StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();// 2、从工厂中获得调度器的实例Scheduler scheduler = stdSchedulerFactory.getScheduler();// 3、创建 JobDetail,引用 “job” 具体的执行类JobDetail job = JobBuilder.newJob(QuartzDemo.class).withDescription("xiangjiao test") // job描述.withIdentity("xiangjiao", "bunana") // name 和 group.build();// 任务执行时间,触发器等long startTimes = System.currentTimeMillis()+3*1000L;Date startDate = new Date(startTimes);// 4、创建 CronTriggerCronTrigger cronTrigger = TriggerBuilder.newTrigger().withDescription("this is a cronTrigger").withIdentity("xiangjiao2", "test2").startAt(startDate)// 使用 SimpleScheduleBuilder 或者 CronScheduleBuilder//.withSchedule(SimpleScheduleBuilder.simpleSchedule())//.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次(正常).withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次(异常).build();// 5、注册任务和定时器scheduler.scheduleJob(job,cronTrigger);// 6、启动 定时调度器scheduler.start();// 7、关闭调度器// scheduler.shutdown();}
}
Springboot 项目配置
依赖引入
相比简单的maven项目
测试方式,Springboot
方式相对较为好理解,只需要引入Springboot
可识别的quartz
依赖即可:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
编写任务具体处理类
增加任务处理类,用于任务调度后的具体处理操作:
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;
import java.util.Date;@Component
public class MyQuartzJob extends QuartzJobBean {/*** 任务的具体执行类* @param context* @throws JobExecutionException*/@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("MyQuartzJob executeInternal ----" + sdf.format(new Date()));}
}
编写配置类
编写配置类,主要用于设定具体的cron
和将指定的任务调度处理类
关联。其代码如下所示:
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 自定义quartz配置类*/
@Configuration
public class MyQuartzConfig {@Beanpublic JobDetail getJob1(){return JobBuilder.newJob(MyQuartzJob.class) // 关联具体的执行类.withDescription("this is quartz job test 1") // 描述.storeDurably().build();}@Beanpublic Trigger testJobTrigger1(){// 使用设定
// SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInSeconds(5)
// .repeatForever();// 使用 cron 表达式CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");return TriggerBuilder.newTrigger().forJob(getJob1()).withIdentity("testJobTrigger1")//.withSchedule(scheduleBuilder).withSchedule(cronScheduleBuilder).build();}
}
注意事项
需要保证编写的bean
,能够被Springboot
自动扫描加载!!
测试
将Springboot
项目启动,观察控制台打印日志信息: