Quartz项目实际使用

Quartz

quartz 是一款开源且丰富特性的任务调度库,能够集成与任何的java 应用,下到独立应用,大到电子商业系统。quartz就是基于java实现的任务调度框架,用于执行你想要执行的任何任务。

概念

1.任务 Job

我们想要调度的任务都必须实现 org.quartz.job 接口,然后实现接口中定义的 execute( ) 方法

2.触发器 Trigger

Trigger 作为执行任务的调度器。我们如果想要凌晨1点执行备份数据的任务,那么 Trigger 就会设置凌晨1点执行该任务。其中 Trigger 又分为 SimpleTrigger 和 CronTrigger 两种。

3.调度器 Scheduler

Scheduler 为任务的调度器,它会将任务 Job 及触发器 Trigger 整合起来,负责基于 Trigger 设定的时间来执行 Job。

实操

导入依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

创建实体

@TableName(value = "schedule_job", keepGlobalPrefix = true)
public class ScheduleJob implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 任务id
     */
    @TableId
    private Long jobId;

    /**
     * spring bean名称
     */
    @NotBlank(message = "bean名称不能为空")
    private String beanName;

    /**
     * 方法名
     */
    @NotBlank(message = "方法名称不能为空")
    private String methodName;

    /**
     * 参数
     */
    private String params;

    /**
     * cron表达式
     */

    @NotBlank(message = "cron表达式不能为空")
    private String cronExpression;

    /**
     * 任务状态  0:正常  1:暂停
     */
    private Integer status;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;
}

创建任务

   public void createScheduleJob(ScheduleJob scheduleJob) {
        try {
            //构建job信息
            JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity(getJobKey(scheduleJob)).build();

            //表达式调度构建器,可以根据scheduleJob修改withMisfireHandling方法,但是使用异步执行定时任务,没必要
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
                .withMisfireHandlingInstructionFireAndProceed();

            //按新的cronExpression表达式构建一个新的trigger
            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob)).withSchedule(scheduleBuilder).build();

            //放入参数,运行时的方法可以获取
            jobDetail.getJobDataMap().put(QuartzJob.JOB_PARAM_KEY, scheduleJob);

            scheduler.scheduleJob(jobDetail, trigger);

            //暂停任务
            if (scheduleJob.getStatus().equals(ScheduleStatus.PAUSE.getStatus())) {
                pauseJob(scheduleJob);
            }
        } catch (Exception e) {
            throw new ActInternalSystemException("创建定时任务失败", e);
        }
    }

执行任务

    public void run(ScheduleJob scheduleJob) {
        try {
            //参数
            JobDataMap dataMap = new JobDataMap();
            dataMap.put(QuartzJob.JOB_PARAM_KEY, scheduleJob);

            scheduler.triggerJob(getJobKey(scheduleJob), dataMap);
        } catch (SchedulerException e) {
            throw new RuntimeException("立即执行定时任务失败", e);
        }
    }

总结

项目自己构建定时任务界面,所有后台设计了实体存入数据库,方便前台页面调用。

相关推荐

  1. Quartz项目实际使用

    2024-03-15 08:40:06       18 阅读
  2. <span style='color:red;'>Quartz</span>

    Quartz

    2024-03-15 08:40:06      14 阅读
  3. c# 实现Quartz任务调度

    2024-03-15 08:40:06       15 阅读
  4. quartz实现动态任务管理系统

    2024-03-15 08:40:06       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 08:40:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 08:40:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 08:40:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 08:40:06       18 阅读

热门阅读

  1. SQL笔记 -- 黑马程序员

    2024-03-15 08:40:06       19 阅读
  2. 第十次CCF-CSP(Markdown、地铁修建)

    2024-03-15 08:40:06       20 阅读
  3. 项目示例 - 4.配置中心 - 1.Nacos

    2024-03-15 08:40:06       16 阅读
  4. WPF 两个程序之间传递参数(shell32.dll)

    2024-03-15 08:40:06       19 阅读
  5. 【C语言】宏定义的详解与实践

    2024-03-15 08:40:06       21 阅读
  6. Docker学习笔记

    2024-03-15 08:40:06       20 阅读
  7. 【Linux】文本替换Ubuntu 中 sed 指令的使用指南

    2024-03-15 08:40:06       20 阅读