springboot中超簡單使用quartz添加動態定時任務


1、在springboot2.x中引入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

2、使用數據庫的需要指定,spring.quartz.job-store-type=jdbc

     數據庫默認使用spring.datasource.*的配置,

     表結構在jar包里面org\quartz-scheduler\quartz\2.3.1\quartz-2.3.1.jar!\org\quartz\impl\jdbcjobstore

 

3、配置工具類兩個方法,一個增加,已刪除,其中scheduler已經自動裝配,可以直接引用

import org.quartz.*;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

@Component
public class QuartzUtil {

    @Resource
    private Scheduler scheduler;

    /**
     * 增加一個job
     *
     * @param jobDetail
     *            任務實現類
     * @param jobName
     *            任務名稱
     * @param jobGroupName
     *            任務組名
     * @param jobTime
     *            時間表達式 (這是每隔多少秒為一次任務)
     * @param jobTimes
     *            運行的次數 (<0:表示不限次數)
     */
    public void addJob( JobDetail jobDetail, String jobName, String jobGroupName, int jobTime,
                       int jobTimes) {
        try {
            // 使用simpleTrigger規則
            Trigger trigger = null;
            if (jobTimes < 0) {
                trigger = TriggerBuilder.newTrigger().withIdentity(jobName, jobGroupName)
                        .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withIntervalInSeconds(jobTime))
                        .startNow().build();
            } else {
                trigger = TriggerBuilder
                        .newTrigger().withIdentity(jobName, jobGroupName).withSchedule(SimpleScheduleBuilder
                                .repeatSecondlyForever(1).withIntervalInSeconds(jobTime).withRepeatCount(jobTimes))
                        .startNow().build();
            }
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }


    /**
     * 刪除任務一個job
     *
     * @param jobName
     *            任務名稱
     * @param jobGroupName
     *            任務組名
     */
    public void deleteJob(String jobName, String jobGroupName) {
        try {
            scheduler.deleteJob(new JobKey(jobName, jobGroupName));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4、添加任務類,要繼承QuartzJobBean類,這樣就能在任務類中注入容器中bean

@Slf4j
public class SendEmailJob extends QuartzJobBean {

    /**
* @Reaource
* private XXXXXXMapper xxxxxMapper
**/ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { log.info("定時任務"); } }

5、引用

        JobDetail jobDetail=JobBuilder.newJob(SendEmailJob.class).build();
        quartzUtil.addJob(jobDetail,"","",100,-1);

  

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM