精华内容
下载资源
问答
  • Quartz-计时器框架

    2019-10-18 16:51:04
    明白Quartz怎么用,首先要了解==Scheduler(调度)、Job(任务)和Trigger(触发器)==这3个核心的概念。 1.Scheduler: 代表一个Quartz的独立运行容器, Trigger和JobDetail可以注册到Scheduler中, 两者在Scheduler中...

    Quartz体系结构:

    明白Quartz怎么用,首先要了解==Scheduler(调度器)、Job(任务)和Trigger(触发器)==这3个核心的概念。

    1.Scheduler:

    代表一个Quartz的独立运行容器, Trigger和JobDetail可以注册到Scheduler中, 两者在Scheduler中拥有各自的组及名称, 组及名称是Scheduler查找定位容器中某一对象的依据, Trigger的组及名称必须唯一, JobDetail的组和名称也必须唯一(但可以和Trigger的组和名称相同,因为它们是不同类型的)。Scheduler定义了多个接口方法, 允许外部通过组及名称访问和控制容器中Trigger和JobDetail。
    Scheduler可以将Trigger绑定到某一JobDetail中, 这样当Trigger触发时, 对应的Job就被执行。一个Job可以对应多个Trigger, 但一个Trigger只能对应一个Job。可以通过SchedulerFactory创建一个Scheduler实例。Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。SchedulerContext内部通过一个Map,以键值对的方式维护这些上下文数据,SchedulerContext为保存和获取数据提供了多个put()和getXxx()的方法。可以通过Scheduler# getContext()获取对应的SchedulerContext实例;

    2.Job:

    是一个接口,只定义一个方法execute(JobExecutionContext context),在实现接口的execute方法中编写所需要定时执行的Job(任务), JobExecutionContext类提供了调度应用的一些信息。Job运行时的信息保存在JobDataMap实例中;

    3. JobDetail:

    Quartz每次调度Job时, 都重新创建一个Job实例, 所以它不直接接受一个Job的实例,相反它接收一个Job实现类(JobDetail:描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息),以便运行时通过newInstance()的反射机制实例化Job。

    4. Trigger:

    Trigger是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。当且仅当需调度一次或者以固定时间间隔周期执行调度,SimpleTrigger是最适合的选择;而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案:如工作日周一到周五的15:00~16:00执行调度等;
    Cron表达式的格式:秒 分 时 日 月 周 年(可选)。
    在这里插入图片描述

    “?”字符:表示不确定的值
    “,”字符:指定数个值
    “-”字符:指定一个值的范围
    “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
    “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
    “W”字符:指定离给定日期最近的工作日(周一到周五)
    “#”字符:表示该月第几个周X。6#3表示该月第3个周五

    Cron表达式范例:
            每隔5秒执行一次:*/5 * * * * ?
            每隔1分钟执行一次:0 */1 * * * ?
            每天23点执行一次:0 0 23 * * ?
            每天凌晨1点执行一次:0 0 1 * * ?
            每月1号凌晨1点执行一次:0 0 1 1 * ?
            每月最后一天23点执行一次:0 0 23 L * ?
            每周星期六凌晨1点实行一次:0 0 1 ? * L
            在26分、29分、33分执行一次:0 26,29,33 * * * ?
            每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

    5. Calendar:

    org.quartz.Calendar和java.util.Calendar不同, 它是一些日历特定时间点的集合(可以简单地将org.quartz.Calendar看作java.util.Calendar的集合——java.util.Calendar代表一个日历时间点,无特殊说明后面的Calendar即指org.quartz.Calendar)。 一个Trigger可以和多个Calendar关联, 以便排除或包含某些时间点。
    假设,我们安排每周星期一早上10:00执行任务,但是如果碰到法定的节日,任务则不执行,这时就需要在Trigger触发机制的基础上使用Calendar进行定点排除。针对不同时间段类型,Quartz在org.quartz.impl.calendar包下提供了若干个Calendar的实现类,如AnnualCalendar、MonthlyCalendar、WeeklyCalendar分别针对每年、每月和每周进行定义;

    下图描述了Scheduler的内部组件结构,SchedulerContext提供Scheduler全局可见的上下文信息,每一个任务都对应一个JobDataMap,虚线表达的JobDataMap表示对应有状态的任务:
    在这里插入图片描述

    展开全文
  • commons-beanutils.ja、commons-collections.jar、commons-logging.jar、commons-digester.jar、quartz.jar包 第二步:在web.xml下配置监听 在web.xml下配置监听的目的是为了项目编译的时候就自动运行监听下配置的...

    第一步:下载所需的Jar包
    commons-beanutils.ja、commons-collections.jar、commons-logging.jar、commons-digester.jar、quartz.jar包
    第二步:在web.xml下配置监听
    在web.xml下配置监听的目的是为了项目编译的时候就自动运行监听下配置的业务类。

    <!--监听(作用就是启动项目的时候就会运行这个类,这个类需要实现ServletContextListener接口)-->
    <listener>     
           <listener-class>     
                com.qt.quartz.QuartzMain   
           </listener-class>     
    </listener>

    第三步:编写com.qt.quartz.QuartzMain类
    这个类只是作为启动类,调用QuartzLoad类的2个方法,因为这个类是静态的,所以可以用名称直接点出方法名称。

    package com.qt.quartz;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    public class QuartzMain implements ServletContextListener {
        // 服务器启动时执行该事件
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            try {
                QuartzLoad.run();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 服务器停止时执行该事件
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            try {
                QuartzLoad.stop();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    第四步:编写com.qt.quartz.QuartzLoad类
    这个类里面有2个方法,一个是启动quartz的方法,一个是关闭方法,这个类里面可以定制每隔多少时间循环调用业务类一次。

    package com.qt.quartz;
    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class QuartzLoad {
        private static Scheduler sched; 
        public static void run() throws Exception { 
            //创建LzstoneTimeTask的定时任务 
    //三个参数,第一个是自己取得名称、第二个是固定的、第三个是业务类
            JobDetail jobDetail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,QuartzJob.class); 
     //三个参数,第一个是自己取得名称、第二个是触发器组名称、第三个是自定义时间
            CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0/50 * * * * ?");  
            sched = new StdSchedulerFactory().getScheduler();  
            sched.scheduleJob(jobDetail,trigger);  
            sched.start();
        }
        //停止  
        public static void stop() throws Exception{  
               sched.shutdown();  
         }  
    }
    

    序号 说明 是否必填 允许填写的值 允许的通配符
    1 秒 是 0-59 , - * /
    2 分 是 0-59 , - * /
    3 小时 是 0-23 , - * /
    4 日 是 1-31 , - * ? / L W
    5 月 是 1-12 or JAN-DEC , - * /
    6 周 是 1-7 or SUN-SAT , - * ? / L #
    7 年 否 empty 或 1970-2099 , - * /

    第五步:编写QuartzJob.class类,自己的业务处理类

    package com.qt.quartz;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class QuartzJob implements Job{
        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
             // TODO Auto-generated method stub
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); 
             System.out.println("时间表:"+sdf.format(new Date())); 
        }
    }
    展开全文
  • 最近在写一个导入工具时用到了一个新的东西Quartz 计时器 ,timer有的Quartz 基本都有,所以用Quartz 来写了下代码,并记录。 1、首先需要引用GuGet程序包,搜索' quartz' ,下载安装到程序。 2、直接上代码,创建...

    最近在写一个导入工具时用到了一个新的东西Quartz 计时器 ,timer有的Quartz 基本都有,所以用Quartz 来写了下代码,并记录。

    1、首先需要引用GuGet程序包,搜索' quartz ' ,下载安装到程序。

    2、直接上代码,创建job,trigger等方法

    job传参:  job.JobDataMap.Put("AutoImport", formInstance);   ,我这里'AutoImport' 是一个主窗体的实例

      // 1.创建scheduler的引用
                    ISchedulerFactory schedFact = new StdSchedulerFactory();
                    sched = await schedFact.GetScheduler();
                    //2.启动 scheduler
                    await sched.Start();
                    // 3.创建 job
                    IJobDetail job = JobBuilder.Create<DoWork>()
                            .WithIdentity("job5", "group5")
                            .Build();
                    job.JobDataMap.Put("AutoImport", formInstance);    //job传参
    
                    //   4.创建 trigger
                    ITrigger trigger = TriggerBuilder.Create()
                          .WithIdentity("trigger5", "group5")
                          .StartAt(DateTime.Parse(startime))
                          .WithSimpleSchedule(x => x
                            .WithIntervalInMinutes(int.Parse(jiange))     //下次执行时间的 时间
                            .RepeatForever())               //永远执行
                            .Build();
    
                    // 5.使用trigger规划执行任务job
                    await sched.ScheduleJob(job, trigger);

     

    3、执行job里的方法,获取job传来的主窗体实例,通过实例修改控件的值。

       public class DoWork : IJob
            {
                public virtual async Task Execute(IJobExecutionContext context)
                {
                    AutoImport au = (AutoImport)context.JobDetail.JobDataMap.Get("AutoImport");  //获取job传来的参数
              //修改主窗体中控件的值
             au.datetime_startime.Value = DateTime.Parse(nexttime);   
             au.lab_msg.Text = "等待下次启动时间..." + nexttime;
              await Task.CompletedTask;
           }
        }

    这样就解决了修改主窗体控件值的问题了。

    有关 Quartz 的其他方法,兄弟儿们可以自行百度啦,大把大把的资料demo供你学习!!

     

    展开全文
  • 我用jsp+servlet+mysql搞...那么,如何设计一个计时器,在规定时间将触发,去更改相应的数据库表呢?Spring+quartz 做定时任务楼上提到java.util.Timer如果要使用,题主需要注意这种情况public class BadCaseOfTimer...

    我用

    jsp+servlet+mysql

    搞了一个众筹网站。当一个项目发起后,它有一个众筹时间,过了这个时间,项目就会从众筹状态转到另一个状态,当然,这需要在数据库中去操作。那么,如何设计一个计时器,在规定时间将触发,去更改相应的数据库表呢?

    Spring+quartz 做定时任务

    楼上提到

    java.util.Timer

    如果要使用,题主需要注意这种情况

    public class BadCaseOfTimer {

    public static void main(String[] args) {

    Timer timer = new Timer();

    timer.schedule(new ThrowTask(),1);

    timer.schedule(new ThrowTask(),1);

    }

    static class ThrowTask extends TimerTask{

    @Override

    public void run() {

    System.out.println("runnin.."+System.currentTimeMillis());

    throw new RuntimeException();

    }

    }

    }

    可以用java.util.Timer类的schedule方法

    有一个问题

    时间到了以后,从一个状态转到另一个状态,除了改变这个字段的值以外,还有其它需要触发进行的操作么?

    如果没有,很可能你不需要一个定时任务。

    只需要在数据库中记录项目发起时间和期限,在需要判断状态的时候根据这两个值和当前时间,决定项目的状态。

    类似于你的网站里记录用户的生日信息,在页面显示用户年龄。我想没有人会真的在数据库保存年龄然后每天刷新的。

    展开全文
  • Quartz

    2020-03-23 09:58:50
    什么是Quartz 一种任务日程管理系统,用来运行复杂日程表 功能类似定时器 Quartz做了什么 在提前设置好的日期或时间...四个核心接口:核心调度scheduler,任务job,任务描述jobDetail,触发器trigger 定义job(相...
  • spring配置计时器

    2016-01-25 11:26:27
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> ${sycn.timer} class="org.springframework.scheduling.quartz.MethodInvokingJ
  • 样式 <Style x:Key="QuartzMSFont">...Setter Property="TextElement.FontFamily" Value="Resources/#Quartz Regular"/> </Style> 前端UI <TextBlock x:Name="ColorTimer" HorizontalAlign...
  • 在pom.xml文件中添加,可以在maven仓库找最新的版本 <!-- quartz定时器 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifac...
  • Quartz.Net任务调度

    2018-08-13 15:53:26
    我相信在实际项目中经常会用到计时器控件,在这里我用了一个开源库Quartz.Net,直接运行即可!
  • .NET Framework通过System.Timers.Timer类具有“内置”计时器功能-为什么有人使用Quartz而不是这些标准功能? 原因有很多!这里有一些: 计时器没有持久性机制。 计时器的时间安排不灵活(只能设置开始时间和重复...
  • 今天做一个功能,一开始将某按钮置灰,然后倒计时60秒。每秒钟都刷新按钮的文字,倒计时结束后,使按钮可用。很快就做好了,不过发现一个问题,就是按钮会闪烁,跟星星似的。我的代码是:_countDown=60;UIColor*...
  • 定时器跟闹钟的功能类似,可以定义一个时间来运行一段程序,比如实时的数据检测 或者是网上各种网站视频会员都是用计时器来提醒用户。 常见的定时器有 java.util包提供的Timer定时器 和 第三方提供的quzrtz定时器 ...
  • 在使用Timer类需要面对的问题:计时器没有持久化机制;计时器具有不灵活的计划(仅能设置开始时间和重复间隔,没有基于日期,时间等);计时器不使用线程池(每个定时器一个线程);计时器没有真正的管理方案 – 你...
  • 它是许多ASP.NET开发人员的主要资料,被用作以可靠的群集方式在计时器上运行后台任务的方式。将Quartz.NET与ASP.NET Core一起使用非常相似-Quartz.NET支持.NET Standard 2.0,因此您可以轻松地在应用程序中使用它...
  • ...Quartz2D绘制时定时器要怎么选择呢?我们知道计时器常用有两种: NSTimer定时器 [NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(update) userInfo:nil
  • 开发项目中,使用到quartz,想把计时器的数据源和主程序的数据源分离,刚开始选择的是通过mybatis-plus提供动态数据源,可是发现在quartz启动时候会默认的将数据计时器相关的11张表信息建立到主库,经过研究,最后...
  • 看了别人解释的各个定时任务,自己整理一下。 一、Timer Java自带的java.util.Timer类,该...在工具类Timer中,提供了四个构造方法,每个构造方法都启动了计时器线程,同时Timer类可以保证多个线程共享单个Timer对...
  • 1.业务需求:预约表中有一个状态字段status,有5种状态,0发起,1待核销,2驳回,3核销,4超时,后台要不断地去更新status的状态值,...方法2:利用quartz计时框架处理后台状态值修改,这里利用quartz去实现3.在applic
  • 公司需要做一个表单定时任务,定时器,能想到的有两个 java.util.Timer 和quartz   先看一下java.util.Timer。 ...一种线程设施,用于安排以后在后台线程中执行的...如果完成某个计时器任务的时间太长,那么它...
  • akka-quartz, 因为用Camel来安排Akka演员是愚蠢 akka石英Akka调度程序有限,并且使用 Apache camel 运行计时器是愚蠢的。 特性石英调度程序Akka演员们Fin版本使用 Akka 2.1.x 在 Scala 2.10.x/2.11.x 上使用
  • 使用Quartz写一个简单的计时器,再使用观察者模式实现秒杀按钮启动的案例 题目 在某些重要的场景下,电商会开展定时秒杀活动,假设在6.18活动中携程网会对站内多种商品在同一时刻启动秒杀活动,请使用观察者模式,...
  • Quartz.net 动态调整任务的调度时间

    千次阅读 2018-08-03 10:10:20
    Timer计时器。 4. Quartz.NET  但是这些基本都是提供按时间间隔,固定的时间点(每天,每月,每年)执行。这些任务的执行时间都是作为配置文件在任务开始运行时就加载进去了,以后就一直按着这个点进行。若想修改...
  • Quartz实例及IIS闲置超时解决方案

    千次阅读 2013-11-18 17:26:09
    要点:Quartz功能,Quartz实例,Iis闲置超时解决方案 在Web应用中常要实现的一个功能就是: 1)某一个功能模块的代码需要定期...那么这个时间就需要一个计时器来执行。但是传统的System.Threading;System.Windows.Form
  • Web应用程序框架 这是一个易于使用,支持gradle的纯Java,轻量级和可伸缩性,... Quartz计时器服务 Hibernate管理数据库对象 REST API,基于Jersey(服务器端)和Retrofit(客户端) Web UI示例:一个通过Vaadin v7
  • 在12306上买了一张火车票,30分钟内需要支付(需要添加一个倒计时),30分钟还没有支付就请求取消订单的接口(自动根据url请求),如果支付了收到了支付的回调通知后,就删除计时器上的该任务 1.项目结构图 2....
  • 概述:spring-context-support 为方便创建Quartz定时任务,提供:MethodInvokingJobDetailFactoryBean(定时任任务工厂)、CronTriggerBean(任务调度计时器)、SchedulerFactoryBean(调度触发器),方便spring容器的注入...
  • 在使用Timer类需要面对的问题:计时器没有持久化机制;计时器具有不灵活的计划(仅能设置开始时间和重复间隔,没有基于日期,时间等);计时器不使用线程池(每个定时器一个线程);计时器没有真正的管理方案 - 你必...
  • 前言该系统使用场景:在12306上买了一张火车票,30分钟内需要支付(需要添加一个倒计时),30分钟还没有支付就请求取消订单的接口(自动根据url请求),如果支付了收到了支付的回调通知后,就删除计时器上的该任务1....

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

计时器quartz