quartz 实例记录

  之前介绍过了quartz的一些相关理论知识,感觉上挺简单的,实际动手操作也确实如此,去quartz的官网上把Jar包下载下来以后,会看到它的目录里有例子程序,看完第一个例子觉得还可以,但是看后面两个例子程序有点让人小小的无语,可能quartz觉得程序写的越多,给出的使用方法也会越多,但是看上去很乱,而且大部分代码是重复的,所以我把他们简单化成一个例子,把它们记录下来。

  本文一共有两个例子,这两个例子共用一个Job的实现,叫MyJob类,代码如下

package com.jll.quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyJob implements Job {

    private static Logger logger = LoggerFactory.getLogger(MyJob.class);

    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        logger.info(context.getJobDetail().getKey() + " start to work at"
                + new Date());
    }

}

下面的代码是第一个例子,设置重复的次数和重复时间的

package com.jll.quartz;

import java.util.Date;

import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SimpleExample {

    public void run() throws SchedulerException{

        Logger log = LoggerFactory.getLogger(SimpleExample.class);
        log.info("------- Initializing ----------------------");
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler sched = factory.getScheduler();
        log.info("------- Initialization Complete -----------");

        log.info("------- Scheduling Job  -------------------");

        Date startTime = DateBuilder.evenMinuteDate(new Date());

        JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

        SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(10)).build();

        Date ft = sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000L + " seconds");
        sched.start();

        try
        {
          Thread.sleep(30000L);
        }
        catch (Exception e)
        {
        }

      }

      public static void main(String[] args)
        throws Exception
      {
        SimpleExample example = new SimpleExample();
        example.run();
      }
    }

从代码中可以看出来任务重复10次,每1秒重复一次

第二个例子是使用CronExpression表达式的,

package com.jll.quartz;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CronExpressionExample {

    public void run() throws SchedulerException {
        Logger log = LoggerFactory.getLogger(CronExpressionExample.class);

        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler sched = factory.getScheduler();

        JobDetail job = JobBuilder.newJob(MyJob.class)
                .withIdentity("job1", "group1").build();

        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                .build();

        Date date = sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " has been scheduled to run at: " + date
                + " and repeat based on expression: "
                + trigger.getCronExpression());

        sched.start();

        log.info("------- Started Scheduler -----------------");

        try
        {
          Thread.sleep(30000L);
        }
        catch (Exception e)
        {
        }

        log.info("------- Shutting Down ---------------------");

        sched.shutdown(true);

        log.info("------- Shutdown Complete -----------------");

        SchedulerMetaData metaData = sched.getMetaData();
        log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    }

    public static void main(String[] args)
            throws Exception
          {
            CronExpressionExample example = new CronExpressionExample();
            example.run();
          }

}

从上面的代码可以看出来任务每两秒钟执行一次,主线程30秒后死亡。

时间: 2024-08-24 15:39:04

quartz 实例记录的相关文章

UnderScore的使用实例记录

_.range(),主要用于区间的获取操作.参数说明:(param1):范围上限,(param1,param2):起始及结束范围,(param1,param2,param3):起始结束范围,正数则为区间跨度,-1则为:负数区间跨度. _.range(10); => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] _.range(1, 11); => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] _.range(0, 30, 5); => [0, 5, 10

Quartz 学习记录1

原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不需要定时任务,但是我觉得这个框架还是蛮有意思的,所以就打算来研究学习一下.记录分享一下我的学习记录. 另外网上有的一些定时任务的时间CRON怎么配置什么的我就不介绍了...烂大街了...我就说说我的理解. 与Spring整合 现在可能不太有不用Spring的地方了吧..Spring与quartz整合

如何在spring中运行多个schedulers quartz 实例

http://wzping.iteye.com/blog/468263 1.定义一个JOB <!-- 使用pojo来做job,指定pojo和method -->     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">         <property name="tar

log4net实现多实例记录

原文地址:实现多个LOG4NET日志记录器实例 本文内容为摘抄,请查看原文. 对于.NET Framework开发者来说,使用Log4Net进行日志记录是非常方便的,通常只要写好配置文件和简单的编码就可以轻松实现应用程序的日志记录功能.但是因为很多时候我们做开发没有时间详细阅读文档,所以也会因疏忽犯很多错误,下面写的就是因为没有仔细阅读配置文件文档引发的一个错误. 应用环境:一个Web应用程序,采用三层体系结构,所以记录日志的时候分为应用程序日志.数据访问日志和操作记录日志三个日志.三个日志采用

postman tests实例记录(还没看,一些常用的)

这段时间准备测试api接口,postman这个工具很是方便,特别是里面的tests的javascript脚本. 记录一下测试接口常用的tests验证的实例. 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); 2.将嵌套独享设置为环境变量var array = [1, 2, 3, 4];postman.setEnvironmentVariable("array", JSON.strin

【填坑纪事】一次用System.nanoTime()填坑System.currentTimeMills()的实例记录

JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在使用当中也很容易出错.笔者在前不久的工作当中使用System.currentTimeMillis()时就踩了一个大坑,后来在查明System.currentTimeMillis()和System.nanoTime()的特性后,才用System.nanoTime()来填了这个坑.本文,笔者就以自己的踩

spring+quartz实例

spring自己就支持quartz,这两个集成经常会出现因为包的版本问题而出现的各种问题.而且不同版本的配置方式也有点不同. 我用的是spring4.15+quartz-2.2.0.jar. 先是配置文件applicationContext.xml <!-- 启动触发器的配置开始 --> <bean name="startQuertz" lazy-init="false" autowire="no" class="or

quartz实例以及主要事项(注解)

实现任务类: package com.vnetoo.nec.base.quartz; import org.springframework.context.annotation.Lazy;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component; /** * 定时发送信息 *  * @author lingpy * @since 1.0 */

quartz问题记录-missed their scheduled fire-time

这里有3个原因:1.所有的woker thread(工作线程; 辅助线程)都在运行其他的job2.scheduler(调度器)down了(关于这个down.我不太明确是shutdown了..还是挂掉了.因此下文依旧用down.)3.任务被安排在过去的某一时刻启动(此可能为代码错误) 我的 我的解决方法:修改quartz.properties文件中的org.quartz.threadPool.threadCount的值增大.(从原来的10增大到20), 最近公司加了好多定时任务,导致线程不够用,至