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)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进 ...
随机推荐
- Collector解读以及自定义
一.Collector接口解读: Collector接口解读: public interface Collector<T, A, R> { Supplier<A> suppli ...
- 测开之路一百四十六:WTForms之表单应用
WTForms主要是两个功能:1.生成HTML标签 2.对数据格式进行验证 官网:https://wtforms.readthedocs.io/en/stable/ 这篇介绍用wtform生成htm ...
- maven 导出项目所依赖的jar包
1.在 pom文件中 点击 Run As->Maven Build 2.在 Goals 中输入 dependency:copy-dependencies 3.之后会在 项目目录的 target/ ...
- js Functor Copy
原文地址:https://segmentfault.com/a/1190000006051586?utm_source=tuicool&utm_medium=referral 本处仅仅个人存档 ...
- PL/SQL基本操作
1.常规过程化形式 declare o_booking_flag ); begin -- Call the procedure destine_ticket(', , 'E', , o_booking ...
- 封装 多态 类的约束 super
python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...
- hihocoder 1636 : Pangu and Stones(区间dp)
Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the first livi ...
- 该项目不知道如何运行配置文件 IIS Express。The project doesn’t know how to run the profile IIS Express
原文:该项目不知道如何运行配置文件 IIS Express. 方案1(推荐). 可能原因是:禁用掉Microsft ASP.NET和Web工具扩展和微软Azure的应用程序服务工具扩展,恢复启用即可. ...
- jQuery之筛选方法
1. 父parent.子children.find <div class="yeye"> <div class="father"> &l ...
- IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); 时,报COMException
解决办法: 在Program.cs的Main函数中添加如下代码: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);