普通web整合quartz跑定时任务的示例

目录
  • 一.场景(什么时候用到定时任务)
  • 二.目前都有哪些工具可以定时处理数据
  • 三.如何集成
    • 1.jar包下载
    • 2.理解几个核心概念
  • 四.配置示例
    • 五.在线cron表达式

一.场景(什么时候用到定时任务)

文件跑批,定时处理数据,和业务解耦的场景

二.目前都有哪些工具可以定时处理数据

1.jdk的timertask:数据量小的情况下,单线程的

2.kettle:比较适合逻辑不复杂的数据推送

3.quartz:数据量大的情况下,分布式下的定时任务处理

三.如何集成

1.jar包下载

地址:https://www.jb51.net/softs/539791.html

2.理解几个核心概念

scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节

Job任务
其实Job是接口,其中只有一个execute方法:

package org.quartz;
public abstract interface Job
{
public abstract void execute(JobExecutionContext paramJobExecutionContext) throws JobExecutionException;
}

我们开发者只要实现此接口,实现execute方法即可。把我们想做的事情,在execute中执行即可。

JobDetail
任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。

Trigger触发器
执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger

scheduler任务调度
最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行。

四.配置示例

1.模拟新建一个工作

package tcc.test.quartz;

import com.util.RowList;
import jos.engine.core.jdbc.JdbcTemplate;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
/**
 * Copyright (C) @2022
 *
 * @author: tcc
 * @version: 1.0
 * @date: 2022/3/7
 * @time: 18:20
 * @description:写业务逻辑
 */
public class TccJob implements Job {
    private static String sql = "select * from sr_main limit 100";
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("hello"+new Date());
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        RowList rowList = jdbcTemplate.queryRowList(sql);
        for(int i=0;i<rowList.size();i++){
            System.out.println(rowList.get(i).get("mhzsfz"));
        }
    }
}

2.配置一个监听器,模拟初始化任务,处理db数据

package tcc.test.quartz;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
/**
 * Application Lifecycle Listener implementation class
 * ApplicationContextListener
 *
 */
public class ApplicationContextListener implements ServletContextListener {
    public static Scheduler scheduler = null;

    /**
     * Default constructor.
     */
    public ApplicationContextListener() {
        System.out.println("ApplicationContextListener起来了");
    }

    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    //关闭Web应用时,注销定时任务
    public void contextDestroyed(ServletContextEvent arg0) {
        try {
            scheduler.shutdown();
            System.out.println("scheduler.shutdown");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    //开启Web应用时,开启定时任务
    public void contextInitialized(ServletContextEvent arg0) {
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
//在这里我编写了三个定时任务
            JobDetail updataTheStatus = JobBuilder.newJob(TccJob.class)
                    .withIdentity("updataTheStatus", "group1")
                    .build();

            JobDetail updateTheRemainer = JobBuilder.newJob(TccJob.class)
                    .withIdentity("updateTheRemainer", "group2")
                    .build();

            JobDetail deleteYstdayOrder = JobBuilder.newJob(TccJob.class)
                    .withIdentity("deleteYstdayOrder", "group3")
                    .build();
            //三个触发器
            Trigger trigger1 = updateTheStatus();
            Trigger trigger2 = updateTheRemainer();
            Trigger trigger3 = deleteYstdayOrder();
            //注册
            scheduler.scheduleJob(updataTheStatus, trigger1);
            scheduler.scheduleJob(updateTheRemainer, trigger2);
            scheduler.scheduleJob(deleteYstdayOrder, trigger3);
            scheduler.start();
            System.out.println("start");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }

    //下面是定义三个触发器的静方法
    public static Trigger updateTheStatus() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger updateTheRemainer() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger2", "group2")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger deleteYstdayOrder() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger3", "group3")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

}

3.在项目的web.xml配置监听器,初始化ApplicationContextListener

<listener>
        <listener-class>tcc.test.quartz.ApplicationContextListener</listener-class>
    </listener>

ServletContextListener:tomcat容器启动时实例化,容器宕机时销毁
运行结果:

五.在线cron表达式

地址 https://cron.qqe2.com/

到此这篇关于普通web整合quartz跑定时任务的文章就介绍到这了,更多相关web整合quartz定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用resty Quartz执行定时任务的配置方法

    目录 1.在jobs.properties里配置启动执行的任务 2.通过new的方式来创建临时任务 3.编写一个job执行类 1. 在jobs.properties里配置启动执行的任务 基本quartz配置,在resources下创建quartz目录,并在quartz目录下新建quartz.properties和jobs.properties #quartz.properties #================================================== # 配置实例

  • Spring整合quartz做定时任务的示例代码

    今天我们来分享一波在spring项目使用quartz做定时任务. 首先我这里的项目已经是一个可以跑起来的完整项目,web.xml里面的配置我就不贴出来了. 1.新建一个类ConfigConsts 我们用来放cron表达式: ​​更多cron表达式​​ package com.aowang.quartz; public abstract class ConfigConsts { /** 30分钟执行一次 */ public static final String quartzInterval =

  • springboot整合quartz定时任务框架的完整步骤

    目录 Spring整合Quartz pom文件 对应的properties 文件 配置类 自定义任务类:ScheduledTask 获取spring中bean的工具类:SpringContextUtil 定时任务服务接口:QuartzService QuartzService实现类:QuartzServiceImpl ScheduledTaskRunner类 任务实体类:QuartzTask 任务service层 service实现类 任务controller 数据表 具体使用 具体效果 总结

  • SpringBoot实现quartz定时任务可视化管理功能

    前言 在实际框架或产品开发过程中,springboot中集成quarzt方式基本是以job和trigger的bean对象方式直接硬编码完成的,例如以下代码示例.对于系统内定义的所有定时任务类型,具体执行类,执行策略,运行状态都没有一个动态全局的管理,所有决定将quartz做成可视化配置管理,便于统一管理,也降低了使用门槛,只需要关心job类的实现即可 @Bean public JobDetail SMSJobDetail() { return JobBuilder.newJob(SMSJob.c

  • Spring Boot 配置 Quartz 定时任务的方法

    Quartz有四个核心概念: Job:是一个接口,只定义一个方法 execute(JobExecutionContext context),在实现接口的 execute 方法中编写所需要定时执行的 Job(任务) Double slongitude = Double.valueOf(jobExecutionContext.getJobDetail().getJobDataMap().get("slongitude").toString()); JobDetail:Quartz 每次调度

  • 普通web整合quartz跑定时任务的示例

    目录 一.场景(什么时候用到定时任务) 二.目前都有哪些工具可以定时处理数据 三.如何集成 1.jar包下载 2.理解几个核心概念 四.配置示例 五.在线cron表达式 一.场景(什么时候用到定时任务) 文件跑批,定时处理数据,和业务解耦的场景 二.目前都有哪些工具可以定时处理数据 1.jdk的timertask:数据量小的情况下,单线程的 2.kettle:比较适合逻辑不复杂的数据推送 3.quartz:数据量大的情况下,分布式下的定时任务处理 三.如何集成 1.jar包下载 地址:https

  • SpringBoot整合Quartz实现定时任务详解

    目录 Quartz简介 核心概念 Scheduler JobDetail Job Trigger SpringBoot整合Quartz 准备数据库表 Maven相关依赖 配置文件 quartz配置类 创建任务类 创建监听类 运行结果 Quartz简介 Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.它有很多特征,如:数据库支持,集群,插件,EJB

  • springboot整合quartz实现定时任务示例

    在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. 2.使用spring的定时器: spring自带支持定时器的任务实现.其可通过简单配置来使用到简单的定时任务. @Component @Configurable @EnableScheduling p

  • Spring整合Quartz分布式调度的示例代码

    前言 为了保证应用的高可用和高并发性,一般都会部署多个节点:对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源, 另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务. Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>

  • spring boot整合quartz实现多个定时任务的方法

    最近收到了很多封邮件,都是想知道spring boot整合quartz如何实现多个定时任务的,由于本人生产上并没有使用到多个定时任务,这里给个实现的思路. 1.新建两个定时任务,如下: public class ScheduledJob implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("sched

  • springboot创建的web项目整合Quartz框架的项目实践

    目录 介绍 基于springboot创建的web项目整合Quartz框架 依次实现mvc三层 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序.Jobs可以做成标准的Java组件或EJBs.Quartz的最新版本为Quartz 2.3.2. quartz可以在某一个有规律的时间点干某件事,是一个任务调度框

  • Java使用quartz实现定时任务示例详解

    目录 正文 配置文件 pom 定时任务和触发器 定时任务的业务代码 正文 最近新到了一个项目,用到定时任务的地方是真滴多. 就稍微研究了一下,来做个demo. 其实定时任务使用很广泛也很方便,之前做的人事管理项目,就会定期执行定时任务计算工资,对于一个saas服务来说,即时的计算所有员工的工资有点奢侈,所以在每周末计算一次就ok了. 国外有的公司是一周发一次工资,所以当时的逻辑是一周算一次.在国内就一月一次很ok了.在当时的report服务中,也是定时任务同步数据到Birt服务,然后展现数据.

  • SpringBoot 整合 Quartz 定时任务框架详解

    目录 前言 一.简单聊一聊 Quartz 1.1.Quartz 概念 二.SpringBoot 使用 Quartz 2.1.基本步骤 2.2.执行 Quartz 需要的SQL文件 2.3.Controller 2.4.Service 划重点 2.5.实体类 2.6.简单的 Job 案例 2.7.那么该如何使用呢? 前言 在选择技术栈之前,一定要先明确一件事情,你真的需要用它吗?还有其他方式可以使用吗? 相比其他技术技术,优点在哪里呢?使用了之后的利与弊等等. 写这个主要是因为一直想写一下定时任务

随机推荐