springboot整合quartz多任务的配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinafire525/article/details/85273735

1.maven依赖

<!-- quartz 使用了该jar包PlatformTransactionManager类 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-tx</artifactId>
</dependency>
<!-- 该依赖里面有spring对schedule的支持 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
   <groupId>org.quartz-scheduler</groupId>
   <artifactId>quartz</artifactId>
   <version>2.3.0</version>
</dependency>

2.

任务类1

@Service
@EnableScheduling
public class CustomerMonthBillJob {

    public void billGenerator()
    {

   
        try {
            System.out.println("无敌大强");
        
        }
        catch (Exception e)
        {
    
        }


    }



}

任务类2

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Service
@EnableScheduling
public class CustomerShortBillJob  {

    public void shortBillGenerator(){
        try {
            System.out.println("小强很强");

        }
        catch (Exception e)
        {

        }

    }

}

3.使用java配置 (无需额外的yml或properties配置)

import com.joydigit.seniorcaring.scheduler.jobs.CustomerMonthBillJob;
import com.joydigit.seniorcaring.scheduler.jobs.CustomerShortBillJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.context.annotation.Configuration;

/**
 * task config
 */
@Configuration
public class QuartzConfiguration {


    /**
     * 配置任务-短住账单
     * @param customerShortBillJob
     * @return
     */
    @Bean(name = "shortBillJob")
    public MethodInvokingJobDetailFactoryBean detailShortFactoryBean(CustomerShortBillJob customerShortBillJob) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(true);
        // 设置任务的名字
        jobDetail.setName("shortBillJob");

        // 设置任务的分组,在多任务的时候使用
        jobDetail.setGroup("shortBillJobGroup");

        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(customerShortBillJob);
        // 需要执行的方法
        jobDetail.setTargetMethod("shortBillGenerator");
        return jobDetail;
    }


    /**
     * 定时触发器-短住账单
     * @param shortBillJob
     * @return
     */
    @Bean(name = "shortJobTrigger")
    public CronTriggerFactoryBean cronShortJobTrigger(JobDetail shortBillJob) {
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(shortBillJob);
        //cron表达式,每1分钟执行一次
        trigger.setCronExpression("0 0/1 * * * ?");
        trigger.setName("JobTriggerShort");
        return trigger;
    }



    /**
     *  配置任务-月账单
     * @param customerMonthBillJob QuartzTask为需要执行的任务
     * @return
     */
    @Bean(name = "monthBillJob")
    public MethodInvokingJobDetailFactoryBean detailMonthFactoryBean(CustomerMonthBillJob customerMonthBillJob) {

        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();

        // 是否并发执行
        jobDetail.setConcurrent(true);

        // 设置任务的名字
        jobDetail.setName("monthBillJob");

        // 设置任务的分组,在多任务的时候使用
        jobDetail.setGroup("monthBillJobGroup");

        // 需要执行的对象
        jobDetail.setTargetObject(customerMonthBillJob);

        /*
         * TODO  非常重要
         * 执行QuartzTask类中的需要执行方法
         */
        jobDetail.setTargetMethod("billGenerator");
        return jobDetail;
    }

    /**
     * 定时触发器-月账单
     * @param monthBillJob 任务
     * @return
     */
    @Bean(name = "monthJobTrigger")
    public CronTriggerFactoryBean cronMonthJobTrigger(JobDetail monthBillJob){

        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();

        trigger.setJobDetail(monthBillJob);

        //cron表达式,每1分钟执行一次
        trigger.setCronExpression("0 0/1 * * * ?");
        //每月1日
       // tigger.setCronExpression("0 0 0 1 * ?");


       // tigger.setCronExpression(taskTime);

        trigger.setName("JobTriggerMonth");

        return trigger;
    }




    /**
     * 调度工厂
     * @param monthJobTrigger 触发器
     * @return
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory(Trigger monthJobTrigger,Trigger shortJobTrigger ) {

        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();

        // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job
        factoryBean.setOverwriteExistingJobs(true);

        // 延时启动,应用启动1秒后
        factoryBean.setStartupDelay(1);

        // 注册触发器
        factoryBean.setTriggers(monthJobTrigger,shortJobTrigger);
        return factoryBean;
    }



}

猜你喜欢

转载自blog.csdn.net/chinafire525/article/details/85273735