quartz的maven依赖_maven项目使用quartz定时任务
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定时任务相关推荐
- IDEA如何导入多个maven依赖的项目
个人网站:http://xiaocaoshare.com/ 1.file->open找到文件的路径导入 导入进来的只是以文件夹形式,需要在project Structure再次导入 设置项目j ...
- java 解决相互依赖_Maven项目常见问题实战(一) 解决相互依赖
很多时候随着项目的膨胀,模块会越来越多,如果设计上 稍有不慎就会出现模块之间相互依赖的情况.这对于使用Maven的用户是比较痛苦的,因为出现模块之间相互依赖的话在构建的时候就会失败,Maven通常要先 ...
- 【MAVEN】Maven依赖和项目代码分离打包,依赖包自动同步到服务器
Maven分离lib打包,lib包自动同步,加速项目部署 目标 整体步骤 Maven配置 1. 分离打包:配置打包.将依赖jar拷贝到外部 2. 编辑MANIFEST.MF 本地<=>服务 ...
- ftp4j jar maven依赖_maven系列--maven添加第三方、本地依赖
一.问题背景 最近在微信公众号开发时遇到一个问题,需要使用一个微信开发框架. 处理方式是:手动下载该框架的jar包,再将其作为第三方依赖添加到maven. 问题是如何在pom文件中配置呢? 二.实现方 ...
- python创建maven工程_Maven项目
一.下载maven(要先配置java环境) 2. 解压,路径为 E:\Software\apache-maven-3.5.2 二.配置maven环境 1. 我的电脑->属性->高级系统设置 ...
- maven依赖c3p0_Maven项目中c3p0连接数据库及实例
1)在src目录下新建c3p0-config.xml 内容为 root 123456 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/java?us ...
- SSM项目整合Quartz
一.背景 SSM项目中要用到定时器,初期使用Timer,后来用spring 的schedule,都比较简单,所以功能比较单一而且他们不能动态的配置时间.后来就研究quartz,准备整合到项目中.Qua ...
- springBoot项目集成quartz开发定时任务案例及注意事项
文章目录 quartz下载.安装 实战案例 常见问题及解决方案 quartz下载.安装 Quartz是完全由java开发的一个开源的任务日程管理系统,任务进度管理器就是一个在预先确定的时间到达时,负责 ...
- 【maven】javaee项目添加servlet、jsp依赖
说明 maven管理的javaee项目,需要手动添加servlet.jsp依赖 scope为provided,表示发布时,使用web server提供的servlet.jsp lib maven 依赖 ...
最新文章
- 23.使用load()方法异步请求数据
- react登录页面_React 实现路由拦截
- dotnet 将C#编译为wasm让前端html使用
- mybatis-plus主键配置、全局配置
- html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
- ORACLE监听器TNS服务不能启动的问题解决(转自:http://www.cnweblog.com/sunGIS/archive/2006/08/21/124117.html)...
- 车牌限行:受雾霾天气影响,某市决定当雾霾指数超过设定值时对车辆进行限行,假设车牌号全为数字,且长度不超过6位,限行规则如下:
- OpenStack修改Guest用户密码——利用Qemu guest agent实现
- 【C++课程设计——自助点餐系统】主页及登录界面
- catia导出运动html,CATIA使用DMU生成运动轨迹包络面 | 坐倚北风
- 如何把密码写入代码,让VBA自动撤销工作表保护 / 工作簿保护(使用VBA代码 保护工作表 / 工作簿 和取消保护工作表 / 工作簿)
- 【硬件在环Hil联调问题记录1】
- Android 自动亮度
- Could not reserve enough space for 2097152KB object heap 解决
- 京东云数据库 RDS助力企业便捷运维
- NDK开发之CMake编译构建原生库
- SF Symbols 2在哪里下载 (SwiftUI 教程)
- win下一些常用的工具软件及网管管理系统
- U盘故障—显示隐藏文件
- opencv VideoCapture抓取RTSP高延迟,崩溃解决方法