美文网首页
Spring Boot项目整合Quartz动态任务调度

Spring Boot项目整合Quartz动态任务调度

作者: 柒月姐姐a | 来源:发表于2019-06-17 13:29 被阅读0次

今天项目里要求在某一时间自动触发一些业务,所以想到了Quartz,看了很多网上的文章博客,也遇到了一些坑,所以想记录下来,以后可能也会用到。
1、引入pom依赖

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

2、Quartz配置 .java文件:

@Configuration
public class QuartzConfig {
    @Autowired
    private SpringJobFactory springJobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(springJobFactory);
        return schedulerFactoryBean;
    }

    @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }
}

3、创建job实例

@Component
public class SpringJobFactory extends AdaptableJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

4、创建scheduler实例

@Service
public class QuartzService {

    private static final String JOB_GROUP = "event_job_group";
    private static final String TRIGGER_GROUP = "event_trigger_group";
    @Autowired
    private Scheduler scheduler;

    /**
     * 创建定时任务
     * @param jobDetailName
     * @param cronExpression
     * @param jobClass
     * @throws SchedulerException
     */
    public void createScheduleJob(String jobDetailName, String cronExpression, Class<? extends Job> jobClass) throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(jobClass)
                .withIdentity("task_" + jobDetailName, JOB_GROUP).storeDurably().requestRecovery().build();
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("task_" + jobDetailName, TRIGGER_GROUP).withSchedule(scheduleBuilder).build();
        scheduler.scheduleJob(jobDetail, trigger);
    }
}

5、创建job:写具体的业务逻辑


public class CancelOrderJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
      //业务逻辑处理
      System.out.println("具体业务逻辑");
    }

 
}

6、创建spring监听:项目启动就开始执行


@Configuration
public class ApplicationStartQuartzJobListener implements ApplicationListener<ContextRefreshedEvent> {
    private static Logger LOG = LoggerFactory.getLogger(ApplicationStartQuartzJobListener.class);

    @Autowired
    private QuartzService quartzService;

    /**
     * 初始启动quartz
     */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        try {
            //30分钟自动取消订单任务
            quartzService.createScheduleJob("cancelOrderTask", "0 0/1 * * * ? ", CancelOrderJob.class);
            LOG.info("任务已经启动...");
        } catch (SchedulerException e) {
            LOG.error(e.getMessage());
        }
    }

7、写完具体逻辑后运行效果


image.png

相关文章

网友评论

      本文标题:Spring Boot项目整合Quartz动态任务调度

      本文链接:https://www.haomeiwen.com/subject/bikafctx.html