springboot中整合Quartz定时器案例(详细代码案例)

本文详述了如何在SpringBoot项目中整合Quartz定时器,包括依赖配置、监听器注册、定时任务类实现及YAML配置。通过具体代码案例,展示了从引入依赖到任务调度的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近因为业务需求,在springboot中需要整合Quartz,现整理分享。代码案例全部在这,注释很全,因为时间关系,文字整理比较少,多包涵。代码如下:

依赖jar包

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
    </dependency>
    <dependency>
        <groupId>net.minidev</groupId>
        <artifactId>json-smart</artifactId>
        <version>2.3</version>
        <scope>compile</scope>
    </dependency>

注册spring-boot启动完成事件监听,用于启动job任务

	@Configuration
public class SchedulerListener implements ApplicationListener<ContextRefreshedEvent> {@Autowired
    public QualityScheduler qaScheduler;

    @Override
public void onApplicationEvent(ContextRefreshedEvent event) {
    try {
    	qaScheduler.scheduleJobs();
    } catch (SchedulerException e) {
        e.printStackTrace();
    }
}

@Bean
public JobFactory jobFactory(ApplicationContext applicationContext) {
    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    return jobFactory;
}

@Bean
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory){
	SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
	schedulerFactoryBean.setJobFactory(jobFactory);
//		schedulerFactoryBean.setOverwriteExistingJobs(true);
//		schedulerFactoryBean.setAutoStartup(true);
		return schedulerFactoryBean;
    }
	
}

定时器任务类,实现job重写方法

添加完jar包之后,在业务层实现需要完成的业务逻辑,必须实现job(org.quartz.Job)接口

/**
 * 定时任务
 */
@Slf4j
public class TestJob implements Job {
    public void work(){
        log.info("执行定时任务");
 		//此处为业务逻辑
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        work();
    }
}

开启任务类QualityScheduler

我是在表现层中写的QualityScheduler,代码比较简单。

public class QualityScheduler {

@Autowired
SchedulerFactoryBean schedulerFactoryBean;

@Autowired
BaseConfig baseConfig;

public void scheduleJobs() throws SchedulerException {
    Scheduler scheduler = schedulerFactoryBean.getScheduler();
   // testJob(scheduler);//去掉注释,定时任务就会开始运行
  
}

/**
 * 开启定时检测订单情况的任务
 * @param scheduler
 * @throws SchedulerException
 */
private void testJob(Scheduler scheduler) throws SchedulerException{
	// 1、创建JobDetial对象 , 并且设置选项
    JobDetail jobDetail = JobBuilder.newJob(TestJob.class)//此处拿到业务层job类
            .withIdentity("testJob", "testGroup").build();
    //设置任务启动时间
    //baseConfig.getOrderCron()下面会有代码案例,主要是在yml文件中配置定时器跑的时间间隔
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(baseConfig.getTestCron());
    // 2、通过 TriggerBuilder 创建Trigger对象
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("testJob", "testGroup")
                            .withSchedule(scheduleBuilder).build();
    
    scheduler.scheduleJob(jobDetail,cronTrigger);
}

yml文件配置

建议此yml文件写在业务层

quartz:
  cron:
    test: 0 0 0/2 * * ?        //这里就是调整定时器事件的配置了,各位置的含义可以百度了解

还有一个地方的yml配置(建议写在web层):

###################  是否启动quartz任务扫描  ###################
quartz:
  scan: true

下面是baseconfig配置取值

 @Lazy
@Data
@Configuration
public class BaseConfig {

    /**
     * token超时时间
     */
    @Value("${quartz.cron.test}")
    private String expiretime;
}

全部的代码就在这里了,祝各位好运。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值