定时任务Quart的三种实现方法

  1. Quart1(在main方法中)
  2. Quartz2(没有service)
  3. Quart3(加入service类)

Quart1(在main方法中)

main类

import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

public class QuartzMain {
    public static void main(String[] args) throws SchedulerException {

        JobDetail jobDetail= JobBuilder.newJob(QuartzDemo02.class).build();
        Trigger trigger= TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(3,2)).build();
        Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(jobDetail,trigger);
        scheduler.start();

    }
}

QuartDemo02

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

public class QuartzDemo02 implements Job {


    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Demo02---->"+new Date());
    }
}

Quartz2(没有service)

config类


import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

@Configuration
public class QuartzConfig  {
    // Job
    @Bean
    public JobDetailFactoryBean getJob(){
       JobDetailFactoryBean job=new JobDetailFactoryBean();
       job.setJobClass(QuartzDemo01.class);
        return  job;
    }

    //Trigger
    @Bean
    public SimpleTriggerFactoryBean triggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
        SimpleTriggerFactoryBean trigger=new SimpleTriggerFactoryBean();
        trigger.setJobDetail(jobDetailFactoryBean.getObject());
        trigger.setRepeatInterval(2000);
        trigger.setRepeatCount(5);
        return trigger;
    }
    //Schedule
    @Bean
    public SchedulerFactoryBean getScheduler(SimpleTriggerFactoryBean simpleTriggerFactoryBean)  {
        SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();
        factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
        return factoryBean;
    }
}

QuartDemo01

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

public class QuartzDemo01 implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("定时时间为"+new Date());
    }
}

Quart3(加入service类)

userService类

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public void add(){
        System.out.println("添加人员");
    }
}

quartzDemo03

import java.util.Date;

@Component
public class QuartzDemo03 implements Job{

    @Autowired
    private UserService userService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Demo03------>"+new Date());
        userService.add();
    }
}

因为在demo中加入了服务,然而那个类没有添加到ioc容器中,所以我们要使用下面这个类将userService加入进去
myAdaptableJobFactory


import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;

@Component("myAdaptableJobFactory")
public class MyAdaptableJobFactory extends AdaptableJobFactory {
    /**
     * autowireCapableBeanFactory 可以将一个对象加入到ioc容器当中
     */
    @Autowired
    private AutowireCapableBeanFactory autowireCapableBeanFactory;

    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
     Object obj= super.createJobInstance(bundle);
     this.autowireCapableBeanFactory.autowireBean(obj);
      return obj;
    }
}

quartzConfig

import com.sun.crypto.provider.PBEWithMD5AndDESCipher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

@Configuration
public class QuarztConfig03 {
    @Bean
    public JobDetailFactoryBean getJob(){
        JobDetailFactoryBean job=new JobDetailFactoryBean();
        job.setJobClass(QuartzDemo03.class);
        return job;
    }
    @Bean
    public SimpleTriggerFactoryBean getTrigger(JobDetailFactoryBean jobDetailFactoryBean){
        SimpleTriggerFactoryBean factoryBean=new SimpleTriggerFactoryBean();
        factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        factoryBean.setRepeatInterval(3000);
        factoryBean.setRepeatCount(4);
        return  factoryBean;
    }
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean,MyAdaptableJobFactory myAdaptableJobFactory){
        SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();
        factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
        factoryBean.setJobFactory(myAdaptableJobFactory);
        return factoryBean;
    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值