Quartz常规操作
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11899532.html
Project Directory
Maven Dependency
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.fool.quartz</groupId>
<artifactId>helloquartz</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency> <dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.2</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.29</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
log4j.properties
log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
无状态Job
HelloJob.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import java.util.Date; @Slf4j
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("job name: {}", jobExecutionContext.getJobDetail().getKey().getName());
log.info("job group: {}", jobExecutionContext.getJobDetail().getKey().getGroup());
log.info("job class detail name: {}", jobExecutionContext.getJobInstance().getClass().getName());
log.info("job class simple name: {}", jobExecutionContext.getJobInstance().getClass().getSimpleName()); log.info("trigger name: {}", jobExecutionContext.getTrigger().getKey().getName());
log.info("trigger group: {}", jobExecutionContext.getTrigger().getKey().getGroup()); String jobDetailMessage = jobExecutionContext.getJobDetail().getJobDataMap().getString("message");
String triggerMessage = jobExecutionContext.getTrigger().getJobDataMap().getString("message"); log.info("current job detail message: {}", jobDetailMessage);
log.info("current trigger message: {}", triggerMessage); log.info("current datetime: {}", new Date());
log.info("current job fire time: {}", jobExecutionContext.getFireTime());
log.info("next job fire time: {}", jobExecutionContext.getNextFireTime());
}
}
QuartzJobTest.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; @Slf4j
public class QuartzJobTest {
public static void main(String[] args) throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "job group1")
.usingJobData("message", "HelloMyJob")
.build(); Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "trigger group1")
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
.usingJobData("message", "HelloMyTrigger")
.startNow()
.build(); scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
有状态Job
HelloPersistJob.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution; @PersistJobDataAfterExecution
@Slf4j
public class HelloPersistJob implements Job { private String message;
private Integer count; public void setMessage(String message) {
this.message = message;
} public void setCount(Integer count) {
this.count = count;
} @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// if the key name is the same between trigger and jobDetail, the trigger name will override the jobDetail name
// if you want to fetch both trigger name and jobDetail name, please define different jobData key name
log.info("current name: {}", message); count++;
jobExecutionContext.getJobDetail().getJobDataMap().put("count", count); log.info("job execution count: {}", count);
}
}
Note: 有状态job需要在job类头上加上@PersistJobDataAfterExecution注解
QuartzPersistJobTest.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; @Slf4j
public class QuartzPersistJobTest {
public static void main(String[] args) throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(HelloPersistJob.class)
.withIdentity("job1", "job group1")
.usingJobData("message", "HelloMyJob")
.usingJobData("count", 0)
.build(); Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "trigger group1")
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
.usingJobData("message", "HelloMyTrigger")
.startNow()
.build(); scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
SimpleSchedule
SimpleJob.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import java.util.Date; @Slf4j
public class SimpleJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("current datetime: {}", new Date());
}
}
QuartzSimpleJobTest.java
package org.fool.quartz.job; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; import java.util.Date; public class QuartzSimpleJobTest {
public static void main(String[] args) throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class)
.withIdentity("job1", "job group1")
.build(); Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "trigger group1")
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(3, 8))
.startAt(new Date(System.currentTimeMillis() + 5000))
.endAt(new Date(System.currentTimeMillis() + 10000))
.build(); scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
CronSchedule
CronJob.java
package org.fool.quartz.job; import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import java.util.Date; @Slf4j
public class CronJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("current datetime: {}", new Date());
}
}
QuartzCronJobTest.java
package org.fool.quartz.job; import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class QuartzCronJobTest {
public static void main(String[] args) throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(CronJob.class)
.withIdentity("job1", "job group1")
.build(); Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "trigger group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.startNow()
.build(); scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
Reference
http://www.quartz-scheduler.org/
Quartz常规操作的更多相关文章
- FTP服务器常规操作
导读 FTP协议是Internet文件传输的基础,它是由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.下面就由我给大家简单介绍一下 ...
- Apache服务器常规操作
导读 Apache是世界上排名第一的Web服务器,50%以上的Web服务器都在使用Apache,它几乎可以在所有计算机平台上运行.下面就由我给大家说说Apache服务器的一些常规操作. Apache服 ...
- mysql服务器的常规操作
mysql服务器的常规操作 导读 MySQL是一个小型关系数据库管理系统,目前被广泛的应用在Internet上的中小型网站中,体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,使得许多中小型网站 ...
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...
- Mongodb常规操作【一】
Mongodb是一种比较常见的NOSQL数据库,数据库排名第四,今天介绍一下Net Core 下,常规操作. 首先下C# 版的驱动程序 "MongoDB.Driver",相关依赖包 ...
- C#通过Ado.net对连接数据库并进行添加删除等常规操作的代码
如下资料是关于C#通过Ado.net对连接数据库并进行添加删除等常规操作的内容. static string sqlcon = "server=.;database=;Integrated ...
- react-native 常规操作
1. 关闭xcode打开模拟器的快捷键 , 等常规操作 https://www.jianshu.com/p/f6723f3406b7
- Linux 下的 netfilter 认识与常规操作
Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...
- 数据库mysql的常规操作
1. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进 ...
随机推荐
- web搜索功能测试
功能方面: 是否能按指定条件查到正确.完整的结果,具体表现: 1.1录入条件为可查到结果的正常关键字.词.语句,检索到的内容.链接正确性: 1.2录入条件为不可查到结果的关键字.词.语句: 1.3录入 ...
- Python学习之==>发送邮件
自动化测试执行完成后,需要自动发送测试报告.Python发送邮件可以使用smtplib标准模块,但该模块比较繁琐,推荐使用yagmail这个第三方模块,用法比较简单. 一.邮箱设置 1.在邮箱设置里打 ...
- Call to undefined method app\models\User::find() yii2-admin
这个问题可能大家遇到的不多. 分析原因 问题出在 config/web.php 这个配置文件里面 'components' => [ ..... 'user' => [ 'identity ...
- 理解ES6中的Symbol
一.为什么ES6引入Symbol 有时候我们在项目开发的过程中可能会遇到这样的问题,我写了一个对象,而另外的同时则在这个对象里面添加了一个属性或是方法,倘若添加的这个属性或是方法是原本的对象中本来就有 ...
- centos7配置NTP时间服务器
Network Time Protocol--NTP时间服务器,用来同步网络中各个计算机时间的协议. 通常将一台服务器配置为时间服务器,然后集群内其他服务器都来同步这台服务器的时间. 目的:集群内所有 ...
- 【MM系列】SAP MM模块-查看移动平均价的历史记录
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-查看移动平均价的历 ...
- MySQL学习-预备知识
开始今日份整理 1. 数据库介绍 1.1 数据库定义 数据库是一个由一批分明别类的数据构成的有序集合,这个集合通常被保存为一个或多彼此相关的文件,我们可以理解为,数据库就是一种特殊的文件,其中存储着我 ...
- 索尼A6300
1. 开机提示的NTSC NTSC和PAL,是两种不同视频录制标准,也就是说拍摄视频的时候才有用. a6300 1080P下,最大可以以 每秒 120p(ntsc下)或者 100p(pal下)录制.播 ...
- linux--vm安装
网络排错图解 https://www.linuxidc.com/Linux/2017-03/141863.htm net模式 https://www.linuxidc.com/Linux/2017-0 ...
- [19/06/09-星期日] CSS基础_示例
一.图片格式&Hack(尽量不要使用) IE6对图片png-24的透明效果不支持,IE6中背景会发灰,可以使用png-8来代替.但是使用png-8代替之后清晰度会有所下降. 使用js来解决该问 ...