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秒后死亡。
quartz 实例记录的更多相关文章
- Quartz 使用记录
Quartz 使用记录 官网 https://www.quartz-scheduler.org/ 参考文档 Quartz 2.3.0 什么是 Quartz? 官方描述: Quartz is a ric ...
- ORACLE AWR报告生成过程出现多个实例记录分析
在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- mongodb导出导入实例记录
mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...
- Openstack 使用Centos官方镜像创建实例记录
Openstack 使用Centos官方镜像创建实例记录 准备centos镜像 官方地址:http://cloud.centos.org/centos/7/images 可以看到有各种版本的镜像,我在 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Quartz使用记录总结
Quartz是一个任务调度框架,最近在项目中有用到,所以做个记录总结. 一.主要元素 Scheduler:调度器,控制任务的调度,将JobDetail和Trigger注册到Scheduler加以控制. ...
- 【填坑纪事】一次用System.nanoTime()填坑System.currentTimeMills()的实例记录
JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在 ...
- quartz相关记录
1.http://www.quartz-scheduler.org/api/2.3.1-SNAPSHOT/ api地址 2.https://www.jianshu.com/p/3c3e166a7da1 ...
随机推荐
- Python第十二章正则表达式(2)
1.前提是引入import re 匹配邮箱后缀需要写入r=r'\.com\.cn|\.com|\.cn' r=r'(\w+@\w+(\.com\.con|\.com|\.cn))'ll=re.find ...
- PHP For Windows/php-5.6.11-Win32-VC11-x64启动脚本
启动php-cgi.bat @echo off E: cd E:\php-5.6.11-Win32-VC11-x64 php-cgi.exe -b 127.0.0.1:9000 -c php.ini- ...
- 24. Longest Consecutive Sequence
Longest Consecutive Sequence Given an unsorted array of integers, find the length of the longest con ...
- ssh整合(http://blog.csdn.net/songanling/article/details/22454973)
http://blog.csdn.net/songanling/article/details/22454973
- 剑指Offer:面试题22——栈的压入,弹出序列(java实现)
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- Oracle10G 连接11G数据库,出现ORA -1017用户名/口令无效; 登录被拒绝 的问题
一.出现症状 1.使用sqlplus连接正常 2.C#使用10g的ODP.NET连接时,报上面的错误 二.原因 1.Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写 2.使用 ...
- openldap复制
2台主机使用镜像方式,多于2台主机使用多主方式. 部署sssd登录方式 方法见上一章节 配置复制(镜像方式) #/etc/openldap/slapd.conf配置文件,文件末尾添加以下内容 inde ...
- Java--类的使用
一 方法内部类 1.打开eclipse 选择你的代码存放的地方 2.新增Java项目 点击File-->New-->java project 3.添加一个包 4 ...
- vagrant系列教程(四):vagrant搭建redis与redis的监控程序redis-stat(转)
上一篇php7环境的搭建 真是火爆,仅仅两天时间,就破了我之前swagger系列的一片文章,看来,大家对搭建环境真是情有独钟. 为了访问量,我今天再来一篇Redis的搭建.当然不能仅仅是redis的搭 ...
- XidianOJ 1096 数的拆分
题目描述 输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复. 输入 多组数据.每组只有一个整数n,表示待拆分的自然数n. n<=80 输出 每组一个数,即所有方案数. - ...