Quartz任务框架demo

在这里插入图片描述
上面三个部分就是Quartz的基本组成部分:

调度器:Scheduler
任务:JobDetail
触发器:Trigger,包括SimpleTrigger和CronTrigger

demo:
在这里插入图片描述

@RestController
@RequestMapping
public class TaskController {

    @Resource
    private TaskMgr taskMgr;

    @GetMapping("/testQuartz")
    public void testQuartz() {
        taskMgr.createRepeatTask();

    }
    }
    @Slf4j
@Service
public class TaskMgr {

    @Resource
    private ScheduleTaskMgr scheduleTaskMgr;

    @Resource
    private Executor taskExecutor;
    @SneakyThrows
    public void createRepeatTask() {

        //任务信息持久化,获取任务id
        long taskId = 1l;

        //创建定时任务
        createScheduleTask(1);

        Thread.sleep(3000);

        //任务创建执行时-- 异步保存定时任务日志记录
        taskExecutor.execute(() -> afterCreateTask(taskId));
//        taskExecutor.execute(this::createRepeatTask);
    }

    private void createScheduleTask(long taskId) {
        scheduleTaskMgr.createRepeatTask(taskId);
    }

    private void afterCreateTask(long taskId) {
        log.info("===========任务创建执行时-异步保存定时任务日志记录===============");
    }
}
@Component
public class ScheduleTaskMgr {

    @Autowired
    private Scheduler scheduler;

    private static final String dataKey = "SOME_TASK_ID";

    @SneakyThrows
    public void createRepeatTask(long taskId) {

        String jobName = "job1";
        String jobGroupName = "jobGroup1";
        int intervalTime = 2;
        int repeatCount = 5;
        Date startTime = new Date();
        Date endTime = new Date();//TimeUtil.addSeconds( new Date(),10) ;
//1、创建jobDetail
        String jobData = "" + taskId;
        JobDetail jobDetail = createJobDetail(jobData, jobName, jobGroupName);

        //2、创建触发器Trigger
        Trigger trigger = createTrigger(jobName, jobGroupName, new Date(), new Date(), intervalTime, repeatCount);

        //3、调度器
        scheduler.scheduleJob(jobDetail,trigger);

    }
    private JobDetail createJobDetail(String taskId, String jobName, String jobGroupName) {
        JobDetail jobDetail = JobBuilder.newJob(MyJobProcessor.class)
                .withIdentity(jobName, jobGroupName)
                .usingJobData(dataKey, taskId)
                .build();
        return jobDetail;
    }

    private Trigger createTrigger(String jobName, String jobGroupName, Date startTime, Date endTime, int intervalTime, int repeatCount) {
        SimpleScheduleBuilder builder = SimpleScheduleBuilder.repeatSecondlyForTotalCount(repeatCount, intervalTime);
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "triggerGroup1")
                .forJob(jobName, jobGroupName)
                .startNow()
//                .startAt(startTime)
//                .endAt(endTime)
                .withSchedule(builder)
                .build();
        return trigger;
    }
}
@Slf4j
@DisallowConcurrentExecution
public class MyJobProcessor extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        log.info("----任务触发后到业务代码");
        JobDetail jobDetail = context.getJobDetail();
        JobDataMap jobDataMap = jobDetail.getJobDataMap();

        System.identityHashCode(jobDetail.getJobClass().getClass());

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值