quartz使用的初步以及持久化任务
来源:互联网 发布:gta5卡顿优化 编辑:程序博客网 时间:2024/06/07 04:11
quartz是一个定时任务,就类似linux中的corntab,网上有许多对他详细的描述,这里重在使用。
首先搭建开发环境
1.myeclipse/eclipse 都行,创建一个java项目
2.准备好需要的jar
c3p0-0.9.1.1.jar----数据库连接池log4j-1.2.17.jarmysql-connector-java-5.1.27.jar----这里使用的使mysqlquartz-2.2.1.jarquartz-jobs-2.2.1.jarslf4j-api-1.7.5.jarslf4j-log4j12-1.6.6.jar这里可以使用meven 也可以到 mvn.repository 去下载
3.创建quartz所需要的数据库表
官方有提供这样的sql语句,mysql的如下
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;DROP TABLE IF EXISTS QRTZ_LOCKS;DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;DROP TABLE IF EXISTS QRTZ_TRIGGERS;DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;DROP TABLE IF EXISTS QRTZ_CALENDARS;CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NAME VARCHAR(120) NOT NULL, JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, DESCRIPTION VARCHAR(250) NULL, JOB_CLASS_NAME VARCHAR(250) NOT NULL, IS_DURABLE VARCHAR(1) NOT NULL, IS_NONCONCURRENT VARCHAR(1) NOT NULL, IS_UPDATE_DATA VARCHAR(1) NOT NULL, REQUESTS_RECOVERY VARCHAR(1) NOT NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP));CREATE TABLE QRTZ_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, DESCRIPTION VARCHAR(250) NULL, NEXT_FIRE_TIME BIGINT(13) NULL, PREV_FIRE_TIME BIGINT(13) NULL, PRIORITY INTEGER NULL, TRIGGER_STATE VARCHAR(16) NOT NULL, TRIGGER_TYPE VARCHAR(8) NOT NULL, START_TIME BIGINT(13) NOT NULL, END_TIME BIGINT(13) NULL, CALENDAR_NAME VARCHAR(200) NULL, MISFIRE_INSTR SMALLINT(2) NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP));CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, REPEAT_COUNT BIGINT(7) NOT NULL, REPEAT_INTERVAL BIGINT(12) NOT NULL, TIMES_TRIGGERED BIGINT(10) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP));CREATE TABLE QRTZ_CRON_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, CRON_EXPRESSION VARCHAR(200) NOT NULL, TIME_ZONE_ID VARCHAR(80), PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP));CREATE TABLE QRTZ_SIMPROP_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, STR_PROP_1 VARCHAR(512) NULL, STR_PROP_2 VARCHAR(512) NULL, STR_PROP_3 VARCHAR(512) NULL, INT_PROP_1 INT NULL, INT_PROP_2 INT NULL, LONG_PROP_1 BIGINT NULL, LONG_PROP_2 BIGINT NULL, DEC_PROP_1 NUMERIC(13,4) NULL, DEC_PROP_2 NUMERIC(13,4) NULL, BOOL_PROP_1 VARCHAR(1) NULL, BOOL_PROP_2 VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP));CREATE TABLE QRTZ_BLOB_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, BLOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP));CREATE TABLE QRTZ_CALENDARS ( SCHED_NAME VARCHAR(120) NOT NULL, CALENDAR_NAME VARCHAR(200) NOT NULL, CALENDAR BLOB NOT NULL, PRIMARY KEY (SCHED_NAME,CALENDAR_NAME));CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP));CREATE TABLE QRTZ_FIRED_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, ENTRY_ID VARCHAR(95) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, INSTANCE_NAME VARCHAR(200) NOT NULL, FIRED_TIME BIGINT(13) NOT NULL, SCHED_TIME BIGINT(13) NOT NULL, PRIORITY INTEGER NOT NULL, STATE VARCHAR(16) NOT NULL, JOB_NAME VARCHAR(200) NULL, JOB_GROUP VARCHAR(200) NULL, IS_NONCONCURRENT VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,ENTRY_ID));CREATE TABLE QRTZ_SCHEDULER_STATE ( SCHED_NAME VARCHAR(120) NOT NULL, INSTANCE_NAME VARCHAR(200) NOT NULL, LAST_CHECKIN_TIME BIGINT(13) NOT NULL, CHECKIN_INTERVAL BIGINT(13) NOT NULL, PRIMARY KEY (SCHED_NAME,INSTANCE_NAME));CREATE TABLE QRTZ_LOCKS ( SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME));commit;
4.编写java代码
首先需要一个任务
package com.pro.test.qrtztest;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloQuartz implements Job{@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("Hello Job execute at "+ new Date());}}这个任务实现Job接口,里面只有一个execute方法,当任务触发的时候,就会执行这个方法里面的业务逻辑。在这里面我们打印一下任务触发的时间。
其次,写一个测试类
package com.pro.test.qrtztest;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.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.DateBuilder.IntervalUnit;import org.quartz.impl.StdSchedulerFactory;public class HelloQuartzSchedualing {public static void main(String[] args )throws SchedulerException{//取得一个调取日程SchedulerFactory schedulFactory = new StdSchedulerFactory();Scheduler schedul = schedulFactory.getScheduler();//创建一个调度任务 JobDetail jobDetail = JobBuilder.newJob(HelloQuartz.class).withIdentity("helloquartjob", Scheduler.DEFAULT_GROUP)//param jobname groupname.build();//创建一个触发器 任务和触发器的 groupname 要一致SimpleTrigger simpleTrigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("simpletriggername", Scheduler.DEFAULT_GROUP)//param triggername groupname.startAt(DateBuilder.futureDate(10, IntervalUnit.SECOND))//这里可以使分钟等类型 这里设置10s//.startNow().build();System.out.println("开始任务时间startTime:"+DateBuilder.futureDate(10, IntervalUnit.SECOND));schedul.scheduleJob(jobDetail, simpleTrigger);schedul.start();}}注释写的比较详细,这里的方法都是2.几版本的方法,1.几的方法不是这样的,具体可以看1.几的文档说明。
这个时候,将其作为javaapplication运行一下,已经可以运行,但是有的quartz2.2.1包会报数据库连接错误。好像有的版本的报默认需要持久化,如果成功,会在10s之后打印任务。
如果报错,就需要写一个quartz持久化的quartz.properties
org.quartz.scheduler.instanceName = MySchedulerorg.quartz.threadPool.threadCount = 3org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = myDSorg.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driverorg.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8org.quartz.dataSource.myDS.user = rootorg.quartz.dataSource.myDS.password = org.quartz.dataSource.myDS.maxConnections =5
这里是一个基本的配置,详细配置可以参考api。
这个时候,再次运行,会发现如果成功的话,在数据库的qrtz_trigger 表中会出现一个任务,当任务触发之后,这个任务在表中消失。
0 0
- quartz使用的初步以及持久化任务
- 使用spring quartz 进行持久化的任务调度
- cron计划任务以及Quartz的使用
- Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(三)Quartz持久化
- quartz的使用以及web应用的任务调度
- 使用Java Timer以及quartz调度任务
- Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(一)Quartz组件
- Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(二)Quartz配置文件
- quartz定时任务的使用
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- 关于学习SpringMvc整合QuartZ定时管理任务的持久化管理
- 【Quartz】将定时任务持久化到数据库
- Quartz将定时任务持久化到数据库
- 【Quartz】将定时任务持久化到数据库
- Quartz-任务调度信息持久化到DB中
- 编译CEF
- ajax传值后台获取初步了解
- 设计模式之UML类图初步
- 动态规划练习一 06:登山
- 关于如何阅读源码
- quartz使用的初步以及持久化任务
- Jdbc中事务的保存点解析
- Could not install the app on the device, read the error above for details. Make sure you have an And
- 资源泄漏的调试
- Windows 快捷键
- set集合的实现和性能
- Spring框架总结:
- idea启动项目address localhost:1099 is already in use异常解决
- Spring学习笔记-组件扫描