quartz简介:

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。

1. maven 依赖

org.springframework

spring-context

3.1.1.RELEASE

org.springframework

spring-context-support

3.1.1.RELEASE

org.springframework

spring-tx

3.1.1.RELEASE

org.springframework

spring-web

3.0.5.RELEASE

org.quartz-scheduler

quartz

1.8.5

2. 创建任务:

任务创建:实现Job接口包含唯一的方法:

public void execute(JobExecutionContext context) throws JobExecutionException{};

编码 (QuartzJob.Java):

package com.quartz;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobDataMap;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

/**

* 任务执行类

*/

public class QuartzJob implements Job {

public void execute(JobExecutionContext content) throws JobExecutionException {

System.out.println("任务开始时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

String jobName = content.getJobDetail().getName();

JobDataMap dataMap = content.getJobDetail().getJobDataMap();

String param = dataMap.getString("param");

System.out.println("传递的参数是="+param +"任务名字是="+jobName);

}

}

3. 任务管理(添加任务,修改任务,删除任务)

编码(QuartzManager.java):

package com.quartz;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class QuartzManager {

private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();

private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";

private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";

/**

* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名

* @param jobName 任务名

* @param cls 任务

* @param time 时间设置

*/

@SuppressWarnings("rawtypes")

public static void addJob(String jobName, Class cls, String time) {

try {

Scheduler sched = gSchedulerFactory.getScheduler();

// 任务名,任务组,任务执行类

JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);

//可以传递参数

jobDetail.getJobDataMap().put("param", "railsboy");

// 触发器

CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);

// 触发器名,触发器组

trigger.setCronExpression(time);

// 触发器时间设定

sched.scheduleJob(jobDetail, trigger);

// 启动

if (!sched.isShutdown()) {

sched.start();

}

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)

* @param jobName

* @param time

*/

@SuppressWarnings("rawtypes")

public static void modifyJobTime(String jobName, String time) {

try {

Scheduler sched = gSchedulerFactory.getScheduler();

CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME);

if (trigger == null) {

return;

}

String oldTime = trigger.getCronExpression();

if (!oldTime.equalsIgnoreCase(time)) {

JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME);

Class objJobClass = jobDetail.getJobClass();

removeJob(jobName);

addJob(jobName, objJobClass, time);

}

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 移除一个任务(使用默认的任务组名,触发器名,触发器组名)

* @param jobName

*/

public static void removeJob(String jobName) {

try {

Scheduler sched = gSchedulerFactory.getScheduler();

sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器

sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器

sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 启动所有定时任务

*/

public static void startJobs() {

try {

Scheduler sched = gSchedulerFactory.getScheduler();

sched.start();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

/**

* 关闭所有定时任务

*/

public static void shutdownJobs() {

try {

Scheduler sched = gSchedulerFactory.getScheduler();

if (!sched.isShutdown()) {

sched.shutdown();

}

} catch (Exception e) {

throw new RuntimeException(e);

}

}

}

4. 任务调度测试

编码(QuartzTest.java):

package com.quartz;

import java.text.SimpleDateFormat;

import java.util.Date;

public class QuartzTest {

public static void main(String[] args) {

try {

String job_name = "动态任务调度";

System.out.println("【任务启动】开始(每10秒输出一次)...");

QuartzManager.addJob(job_name, QuartzJob.class, "0/10 * * * * ?");

Thread.sleep(5000);

System.out.println("【修改时间】开始(每2秒输出一次)...");

QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?");

Thread.sleep(6000);

System.out.println("【移除定时】开始...");

QuartzManager.removeJob(job_name);

System.out.println("【移除定时】成功");

System.out.println("【再次添加定时任务】开始(每10秒输出一次)...");

QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?");

Thread.sleep(60000);

System.out.println("【移除定时】开始...");

QuartzManager.removeJob(job_name);

System.out.println("【移除定时】成功");

} catch (Exception e) {

e.printStackTrace();

}

}

public static String formatDateByPattern(Date date, String dateFormat){

SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);

String formatTimeStr = null;

if (date != null) {

formatTimeStr = sdf.format(date);

}

return formatTimeStr;

}

public static String getCron(java.util.Date date){

String dateFormat="ss mm HH dd MM ? yyyy";

return formatDateByPattern(date, dateFormat);

}

}

5. 补充

Quartz有两大触发器,除了上面使用的SimpleTrigger外,就是CronTrigger。CronTrigger能够提供复杂的触发器表达式的支持。CronTrigger是基于Unix Cron守护进程,它是一个调度程序,支持简单而强大的触发器语法。

使用CronTrigger主要的是要掌握Cron表达式。

Cron表达式包含6个必要组件和一个可选组件,如下表所示。

1.png

特殊字符的含义,见下表。

1DQM%GZJN`G~U$H(D2{4DUV.png

常用 Cron表达式举例:

"30 * * * * ?" 每半分钟触发任务

"30 10 * * * ?" 每小时的10分30秒触发任务

"30 10 1 * * ?" 每天1点10分30秒触发任务

"30 10 1 20 * ?" 每月20号1点10分30秒触发任务

"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务

"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务

"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务

"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务

"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务

"15-45 * * * * ?" 15到45秒内,每秒都触发任务

"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次

"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次

"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次

"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务

"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务

"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务

"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务

"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务

小节:(用到的知识多记录)谷歌,百度,自学之道,希望对你有帮助。

quartz的maven依赖_maven项目使用quartz定时任务相关推荐

  1. IDEA如何导入多个maven依赖的项目

    个人网站:http://xiaocaoshare.com/ 1.file->open找到文件的路径导入 导入进来的只是以文件夹形式,需要在project  Structure再次导入 设置项目j ...

  2. java 解决相互依赖_Maven项目常见问题实战(一) 解决相互依赖

    很多时候随着项目的膨胀,模块会越来越多,如果设计上 稍有不慎就会出现模块之间相互依赖的情况.这对于使用Maven的用户是比较痛苦的,因为出现模块之间相互依赖的话在构建的时候就会失败,Maven通常要先 ...

  3. 【MAVEN】Maven依赖和项目代码分离打包,依赖包自动同步到服务器

    Maven分离lib打包,lib包自动同步,加速项目部署 目标 整体步骤 Maven配置 1. 分离打包:配置打包.将依赖jar拷贝到外部 2. 编辑MANIFEST.MF 本地<=>服务 ...

  4. ftp4j jar maven依赖_maven系列--maven添加第三方、本地依赖

    一.问题背景 最近在微信公众号开发时遇到一个问题,需要使用一个微信开发框架. 处理方式是:手动下载该框架的jar包,再将其作为第三方依赖添加到maven. 问题是如何在pom文件中配置呢? 二.实现方 ...

  5. python创建maven工程_Maven项目

    一.下载maven(要先配置java环境) 2. 解压,路径为 E:\Software\apache-maven-3.5.2 二.配置maven环境 1. 我的电脑->属性->高级系统设置 ...

  6. maven依赖c3p0_Maven项目中c3p0连接数据库及实例

    1)在src目录下新建c3p0-config.xml 内容为 root 123456 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/java?us ...

  7. SSM项目整合Quartz

    一.背景 SSM项目中要用到定时器,初期使用Timer,后来用spring 的schedule,都比较简单,所以功能比较单一而且他们不能动态的配置时间.后来就研究quartz,准备整合到项目中.Qua ...

  8. springBoot项目集成quartz开发定时任务案例及注意事项

    文章目录 quartz下载.安装 实战案例 常见问题及解决方案 quartz下载.安装 Quartz是完全由java开发的一个开源的任务日程管理系统,任务进度管理器就是一个在预先确定的时间到达时,负责 ...

  9. 【maven】javaee项目添加servlet、jsp依赖

    说明 maven管理的javaee项目,需要手动添加servlet.jsp依赖 scope为provided,表示发布时,使用web server提供的servlet.jsp lib maven 依赖 ...

最新文章

  1. 23.使用load()方法异步请求数据
  2. react登录页面_React 实现路由拦截
  3. dotnet 将C#编译为wasm让前端html使用
  4. mybatis-plus主键配置、全局配置
  5. html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
  6. ORACLE监听器TNS服务不能启动的问题解决(转自:http://www.cnweblog.com/sunGIS/archive/2006/08/21/124117.html)...
  7. 车牌限行:受雾霾天气影响,某市决定当雾霾指数超过设定值时对车辆进行限行,假设车牌号全为数字,且长度不超过6位,限行规则如下:
  8. OpenStack修改Guest用户密码——利用Qemu guest agent实现
  9. 【C++课程设计——自助点餐系统】主页及登录界面
  10. catia导出运动html,CATIA使用DMU生成运动轨迹包络面 | 坐倚北风
  11. 如何把密码写入代码,让VBA自动撤销工作表保护 / 工作簿保护(使用VBA代码 保护工作表 / 工作簿 和取消保护工作表 / 工作簿)
  12. 【硬件在环Hil联调问题记录1】
  13. Android 自动亮度
  14. Could not reserve enough space for 2097152KB object heap 解决
  15. 京东云数据库 RDS助力企业便捷运维
  16. NDK开发之CMake编译构建原生库
  17. SF Symbols 2在哪里下载 (SwiftUI 教程)
  18. win下一些常用的工具软件及网管管理系统
  19. U盘故障—显示隐藏文件
  20. opencv VideoCapture抓取RTSP高延迟,崩溃解决方法

热门文章

  1. 为什么Excel中,按上下键,不是移动单个单元格,而是整个表格在移动?
  2. fano译码 matlab,卷积码编码和维特比译码的原理、性能与仿真分析
  3. java 头像 微信群_java实现仿微信群组合头像
  4. henauOJ1057(走向人生巅峰)
  5. 穿越机组装配置心得(基于F4飞控)
  6. C语言【空字符】和【空指针】
  7. Linux配置Docker镜像
  8. chatgpt赋能python:Python平面图制作教程
  9. 拟合与优化——利用Scipy包的optimize模块
  10. #(五)、I,数学拟合界的幽灵