引入依赖
quartz是受springboot版本控制的不需要写版本号
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
编写任务类
public class QuartzJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("hello world");
}
}
编写quartz配置类
@Configuration
public class QuartzConfig {
/**
* 声明一个任务
*
* @return
*/
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(QuartzJob.class)
.withIdentity("QuartzJob", "batch1")
.storeDurably()
.build();
}
/**
* 声明一个触发器,什么时候触发这个任务
*
* @return
*/
@Bean
public Trigger trigger() {
return TriggerBuilder.newTrigger()
.forJob(jobDetail())
.withIdentity("trigger", "trigger")
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ?"))
.build();
}
}
任务的并发执行
quartz的任务默认是并发执行的,并发执行是指假设任务的执行时间为10秒,但任务每五秒执行一次,也就是说上一个任务没结束下一个任务又开始执行了
解决方法:使用@DisallowConcurrentExecution注解
@DisallowConcurrentExecution
public class QuartzJob implements Job{
}