之前介绍过了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秒后死亡。

quartz 实例记录的更多相关文章

  1. Quartz 使用记录

    Quartz 使用记录 官网 https://www.quartz-scheduler.org/ 参考文档 Quartz 2.3.0 什么是 Quartz? 官方描述: Quartz is a ric ...

  2. ORACLE AWR报告生成过程出现多个实例记录分析

    在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...

  3. 初识Quartz之第一个Quartz实例

    转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366   版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...

  4. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  5. Openstack 使用Centos官方镜像创建实例记录

    Openstack 使用Centos官方镜像创建实例记录 准备centos镜像 官方地址:http://cloud.centos.org/centos/7/images 可以看到有各种版本的镜像,我在 ...

  6. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  7. Quartz使用记录总结

    Quartz是一个任务调度框架,最近在项目中有用到,所以做个记录总结. 一.主要元素 Scheduler:调度器,控制任务的调度,将JobDetail和Trigger注册到Scheduler加以控制. ...

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

    JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在 ...

  9. quartz相关记录

    1.http://www.quartz-scheduler.org/api/2.3.1-SNAPSHOT/ api地址 2.https://www.jianshu.com/p/3c3e166a7da1 ...

随机推荐

  1. Sybase alter 用法

    原文地址:http://lujinan858.iteye.com/blog/437019 --示例 1 为表添加列.Adaptive Server 为表中每个现有行分配一个 NULL --列值: al ...

  2. 鸟哥的Linux私房菜第零章

    CPU从主存中读取数据通过微指令集控制和进行计算.主存储器内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须要先写回主存储器中, 最后数据才从主存储器传输到输出单元.内存又称主存,是CPU ...

  3. 'libxml/tree.h' file not found

    看看Header Search Paths 为  '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Dev ...

  4. Symfony2 通过命令行调用控制器

    由于系统需求,需要写一个无限循环的控制器,那么既然有一个无限循环的控制器,那么就需要有一个开关,不可能直接通过route来开启吧.当然要使用高级一点的方法啊. 那就是使用控制台通过命令行(comman ...

  5. Android如何使用NoHttp

    NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/yanzhenjie/NoHttp NoHttp是专门做Android网络请求与下载的框架. N ...

  6. js实现判断浏览器版本

    //判断浏览器版本是否过低 var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) var IEversion = ...

  7. C++学习基础五之函数参数——形参

    一.理论部分 C++中函数形参主要分为两类,如图1所示, 图1 总结: 一.当函数参数为非引用形参时,传进函数体内的是实参的拷贝,(注意,对于基本类型而言,拷贝的是实参的值,对于指针而言拷贝的是实参的 ...

  8. 如何对具有端点加密功能的LINE进行取证

    LINE又有新动作了,这回默认即启用了端点加密功能,强调确保传输过程的安全,且让我们来看看如何对付新版的LINE. 有启用Letter Sealing就会在昵称前多个锁头的图像. 这手机据犯嫌供称,落 ...

  9. 【DIOCP知识库】连接上下文TIocpClientContext

    来自弦子介绍 [概述] 该类管理远程连接,每一个远程连接会对应一个该类的实例,开发时可以通过继承该类,扩展属性,可以存储更多的连接信息,可以重写OnRecvBuffer方法进行数据逻辑的处理 [字段/ ...

  10. centos7 ip地址设置

    centos7 ip地址设置 http://simonhu.blog.51cto.com/196416/1588971 CentOS系统 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc ...