SpringBoot整合Quartz

1、SpringBoot1.5版本

(1)引入依赖

<dependency>
	<groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
    <exclusions>
    	<exclusion>
        	<artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

(2)编写job任务类,实现execute方法

@Slf4j
public class SyncBmiJob implements Job {

    @Resource
    private LargeAnalysisScaleService largeAnalysisScaleService;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("执行定时任务");
        Map<String, Object> map = largeAnalysisScaleService.getMap(new QueryWrapper<LargeAnalysisScaleEntity>()
                .eq("open_id", "**********"));

        log.info(map.toString());
    }

}

(3)自定义适配器工厂类(用于解决service无法注入的问题)

@Component
public class MyAdaptableJobFactory extends AdaptableJobFactory {

    @Resource
    private AutowireCapableBeanFactory autowireCapableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Job jobInstance = bundle.getJobDetail().getJobClass().newInstance();
        autowireCapableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

(4)编写定时任务配置类

@Configuration
public class QuartzConfig {

    /**
     * BMI数据同步(创建job对象)
     *
     * @return
     */
    @Bean
    public JobDetailFactoryBean syncBmiJobDetail() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(SyncBmiJob.class);
        return factoryBean;
    }

    /**
     * BMI数据同步触发器(创建cron trigger)
     *
     * @param factoryBean
     * @return
     */
    @Bean
    public CronTriggerFactoryBean syncBmiJobTrigger(JobDetailFactoryBean factoryBean) {
        CronTriggerFactoryBean cron = new CronTriggerFactoryBean();
        // 关联jobDetail
        cron.setJobDetail(factoryBean.getObject());

        // 设置触发时间(每10秒触发一次)
        cron.setCronExpression("0/10 * * * * ?");
        return cron;
    }

    /**
     * 创建scheduler对象
     * 
     * @param triggerFactoryBean
     * @param myAdaptableJobFactory
     * @return
     */
    @Bean
    public SchedulerFactoryBean syncBmiSchedule(CronTriggerFactoryBean triggerFactoryBean, MyAdaptableJobFactory myAdaptableJobFactory) {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        // 关联trigger
        factoryBean.setTriggers(triggerFactoryBean.getObject());

        // 重新设置工厂类
        factoryBean.setJobFactory(myAdaptableJobFactory);
        return factoryBean;
    }
}

(5)开启定时任务

启动类上加上注解@EnableScheduling
在这里插入图片描述

2、SpringBoot2.0及以上版本

(1)引入依赖

<!-- quartz任务调度 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

(2)编写job任务类,重写executeInternal方法

@Component
@Slf4j
public class IssueUserJob extends QuartzJobBean {

    @Resource
    private StaffService staffService;
    @Resource
    private EmployeeService employeeService;

    @Override
    protected void executeInternal(JobExecutionContext context) {
    	log.info("执行定时任务");
    }
}

(3)编写定时任务配置类

@Configuration
public class QuartzConfig {
    private static final String USER_JOB_GROUP_NAME = "USER_JOB_GROUP_NAME";
    private static final String USER_TRIGGER_GROUP_NAME = "USER_TRIGGER_GROUP_NAME";

    /**
     * 员工信息下发(任务详情)
     * @return
     */
    @Bean
    public JobDetail issueUserJobDetail() {
        return JobBuilder.newJob(IssueUserJob.class)
                .withIdentity("issueUserJobDetail", USER_JOB_GROUP_NAME)
                .storeDurably()
                .build();
    }

    /**
     * 员工信息下发(触发器)
     * @return
     */
    @Bean
    public Trigger issueUserJobTrigger() {
        // 每10分钟执行一次
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/10 * * * ? ");

        //创建触发器
        return TriggerBuilder.newTrigger()
                .forJob(issueUserJobDetail()) //关联JobDetail
                .withIdentity("issueUserJobTrigger", USER_TRIGGER_GROUP_NAME)
                .withSchedule(cronScheduleBuilder) //关联调度器
                .build();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值