Spring Boot 1.x 集成Quartz定时任务调度框架

由于项目用到定时任务,而Spring Boot的Scheduled不支持每个月最后一天的表达式;然后通过百度找了下目前比较流行的定时任务调度,最后领导决定用Quartz(其实就是因为Quartz听过,其他的没听过所以就不考虑了)。

网上找了很多例子,要么是Spring配置文件的,要么是以Spring Boot 2.0整合的,所以都不能使用。最后研究了下Quartz发现好像是配置的问题。

直接上代码,整合即用。

POM文件:

 <dependency>
   <groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>

多余的pom就不上了。

配置类:


import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;

@Configuration
public class TaskConfig {

@Bean
public JobDetail jobDetail() {
return new JobDetail();
}

@Bean
public Scheduler scheduler(JobDetail jobDetail) {
Scheduler scheduler = null;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(detailFactoryBean(jobDetail).getObject(), assetDepreciationJobDetailTrigger());
} catch (SchedulerException e) {
e.printStackTrace();
}
return scheduler;
}

@Bean(name = "detailFactoryBean")
public MethodInvokingJobDetailFactoryBean detailFactoryBean(JobDetail jobDetail) {
MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
bean.setTargetObject(jobDetail); // Job类
bean.setTargetMethod("job"); // Job方法名称
bean.setConcurrent(false);
return bean;
}

private Trigger assetDepreciationJobDetailTrigger() {
// SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.repeatHourlyForever();

// Cron类型的定时任务
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("20 05 15 * * ?");
return TriggerBuilder.newTrigger()
.withIdentity("quartzTaskService")
.withSchedule(cronScheduleBuilder)
.build();
}
}

 

Job类:

public class JobDetail {

public void job() {
System.out.println("123456");
}

}
posted @ 2019-08-23 15:24  屈小舒  阅读(319)  评论(0编辑  收藏  举报