第一步:导入依赖
<!-- quartz依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
第二步:编写配置文件:
spring:
quartz:
#相关属性配置
properties:
org:
quartz:
scheduler:
instanceName: clusteredScheduler
instanceId: AUTO
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: true
clusterCheckinInterval: 10000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
#数据库方式
job-store-type: jdbc
#初始化表结构
#jdbc:
#initialize-schema: never
编写业务罗层:
/**
* 业务逻辑层对象
*/
@Service
public class UserService {
public void show(){
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(format+"==>定时任务执行了...");
}
}
编写任务类:
package com.example.job;
import com.example.service.UserService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.util.Date;
public class MyCronJob extends QuartzJobBean {
// 注入业务逻辑层对象,进行调用,执行任务
@Autowired
UserService userService;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
userService.show();
}
}
编写配置类:(我的配置类中有3个任务)
package com.example.config;
import com.example.job.MyCronJob;
import com.example.job.MyJob;
import com.example.job.MyJobTest;
import org.quartz.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class QuartzConfiguration {
// 使用jobDetail包装job
@Bean
public JobDetail myJobDetail() {
return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build();
}
// 把jobDetail注册到trigger上去
@Bean
public Trigger myJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(15).repeatForever();
return TriggerBuilder.newTrigger()
.forJob(myJobDetail())
.withIdentity("myJobTrigger")
.withSchedule(scheduleBuilder)
.build();
}
// 使用jobDetail包装job
@Bean
public JobDetail myCronJobDetail() {
return JobBuilder.newJob(MyCronJob.class).withIdentity("myCronJob").storeDurably().build();
}
// 把jobDetail注册到Cron表达式的trigger上去
@Bean
public Trigger CronJobTrigger() {
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
return TriggerBuilder.newTrigger()
.forJob(myCronJobDetail())
.withIdentity("myCronJobTrigger")
.withSchedule(cronScheduleBuilder)
.build();
}
// 使用jobDetail包装job
@Bean
public JobDetail myAdaptableJobFactoryDetail() {
return JobBuilder.newJob(MyJobTest.class).withIdentity("myCronJob1").storeDurably().build();
}
// 把jobDetail注册到Cron表达式的trigger上去
@Bean
public Trigger CronsJobTrigger() {
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
return TriggerBuilder.newTrigger()
.forJob( myAdaptableJobFactoryDetail())
.withIdentity("myCronJobTrigger1")
.withSchedule(cronScheduleBuilder)
.build();
}
}
启动框架结果显示:
end My Job:2020-01-21T22:58:44.521
2020-01-21 22:58:50==>定时任务执行了...
start My Job:2020-01-21T22:58:56.267
end My Job:2020-01-21T22:58:59.267
2020-01-21 22:59:00==>定时任务执行了...
2020-01-21 22:59:10==>定时任务执行了...
start My Job:2020-01-21T22:59:11.267
end My Job:2020-01-21T22:59:14.268
2020-01-21 22:59:20==>定时任务执行了...