1、在springboot2.x中引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
2、使用數據庫的需要指定,spring.quartz.job-store-type=jdbc
數據庫默認使用spring.datasource.*的配置,
表結構在jar包里面org\quartz-scheduler\quartz\2.3.1\quartz-2.3.1.jar!\org\quartz\impl\jdbcjobstore
3、配置工具類兩個方法,一個增加,已刪除,其中scheduler已經自動裝配,可以直接引用
import org.quartz.*; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component public class QuartzUtil { @Resource private Scheduler scheduler; /** * 增加一個job * * @param jobDetail * 任務實現類 * @param jobName * 任務名稱 * @param jobGroupName * 任務組名 * @param jobTime * 時間表達式 (這是每隔多少秒為一次任務) * @param jobTimes * 運行的次數 (<0:表示不限次數) */ public void addJob( JobDetail jobDetail, String jobName, String jobGroupName, int jobTime, int jobTimes) { try { // 使用simpleTrigger規則 Trigger trigger = null; if (jobTimes < 0) { trigger = TriggerBuilder.newTrigger().withIdentity(jobName, jobGroupName) .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withIntervalInSeconds(jobTime)) .startNow().build(); } else { trigger = TriggerBuilder .newTrigger().withIdentity(jobName, jobGroupName).withSchedule(SimpleScheduleBuilder .repeatSecondlyForever(1).withIntervalInSeconds(jobTime).withRepeatCount(jobTimes)) .startNow().build(); } scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 刪除任務一個job * * @param jobName * 任務名稱 * @param jobGroupName * 任務組名 */ public void deleteJob(String jobName, String jobGroupName) { try { scheduler.deleteJob(new JobKey(jobName, jobGroupName)); } catch (Exception e) { e.printStackTrace(); } } }
4、添加任務類,要繼承QuartzJobBean類,這樣就能在任務類中注入容器中bean
@Slf4j public class SendEmailJob extends QuartzJobBean { /**
* @Reaource
* private XXXXXXMapper xxxxxMapper
**/ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { log.info("定時任務"); } }
5、引用
JobDetail jobDetail=JobBuilder.newJob(SendEmailJob.class).build(); quartzUtil.addJob(jobDetail,"","",100,-1);