精进Quartz—Quartz简单入门Demo(二)

要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去。 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两种进行简单的说明。并附上代码! 首先需要添加Quartz的Jar包 ,我使用的是quartz.2.2.1版本!

大家好,又见面了,我是全栈君。

欢迎关注我的公众号: Java编程技术乐园。分享技术,一起精进Quartz!

做一个积极的人

编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去。
下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两种进行简单的说明。并附上代码!
首先需要添加Quartz的Jar包 ,我使用的是quartz.2.2.1版本!
Demo代码下载地址quartz_demo

<!-- quartz -->
    <dependency>
		 <groupId>org.quartz-scheduler</groupId>
		 <artifactId>quartz</artifactId>
		 <version>2.2.1</version>
	</dependency>
	<dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>

一、RAM方式

要测试RAMdemo的代码,请先删除demo中这个quartz.properties文件,或者重命名!否则会测试不成功!

1、Job

package com.dufy.learn;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RAMJob implements Job{ 
   
	
	private static Logger _log = LoggerFactory.getLogger(RAMJob.class);
	
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException { 
   
		
		_log.info("Say hello to Quartz" + new Date());
	}
	
}

2、QuartzTest

package com.dufy.learn;
import java.util.Date;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** * This is a RAM Store Quartz! * @author dufy * @date 2017.02.04 * */
public class RAMQuartz { 

private static Logger _log = LoggerFactory.getLogger(RAMQuartz.class);
public static void main(String[] args) throws SchedulerException { 

//1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler();
//3.创建JobDetail
JobDetail jb = JobBuilder.newJob(RAMJob.class)
.withDescription("this is a ram job") //job的描述
.withIdentity("ramJob", "ramGroup") //job 的name和group
.build();
//任务运行的时间,SimpleSchedle类型触发器有效
long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
Date statTime = new Date(time);
//4.创建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
Trigger t = TriggerBuilder.newTrigger()
.withDescription("")
.withIdentity("ramTrigger", "ramTriggerGroup")
//.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.startAt(statTime)  //默认当前时间启动
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
.build();
//5.注册任务和定时器
scheduler.scheduleJob(jb, t);
//6.启动 调度器
scheduler.start();
_log.info("启动时间 : " + new Date());
}
}

运行结果

SimpleScheduleBuilder

这里写图片描述

CronScheduleBuilder

这里写图片描述

二、JDBC方式

使用jdbc方式,就要配置quartz.properties文件,并且在开始的时候在数据库中新增表!
我使用的数据库是mysql,数据库中表在quartz_demo里面有,需要的请在里面下载!
运行 tables_db2_v8.sql 这个文件。

#JDBC驱动
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz_test
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:root
org.quartz.dataSource.qzDS.maxConnection:10

1、MyJob

package com.dufy.jdbctest;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyJob implements Job{ 

private static final Logger log = LoggerFactory.getLogger(MyJob.class);
@Override
public void execute(JobExecutionContext context)throws JobExecutionException { 

log.info("MyJob is start ..................");
log.info("Hello quzrtz "+
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ").format(new Date()));
log.info("MyJob is end .....................");
}
}

2、QuartzJdbcTest

package com.dufy.jdbctest;
import java.text.ParseException;
import java.util.List;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzJdbcTest { 

public static void main(String[] args) throws SchedulerException,
ParseException { 

startSchedule();
//resumeJob();
}
/** * 开始一个simpleSchedule()调度 */
public static void startSchedule() { 

try { 

// 1、创建一个JobDetail实例,指定Quartz
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
// 任务执行类
.withIdentity("job1_1", "jGroup1")
// 任务名,任务组
.build();
//触发器类型
SimpleScheduleBuilder builder = SimpleScheduleBuilder
// 设置执行次数
.repeatSecondlyForTotalCount(5);
//CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule("0/2 * * * * ?");
// 2、创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1_1", "tGroup1").startNow()
.withSchedule(builder)
.build();
// 3、创建Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
// 4、调度执行
scheduler.scheduleJob(jobDetail, trigger);
try { 

Thread.sleep(60000);
} catch (InterruptedException e) { 

e.printStackTrace();
}
//关闭调度器
scheduler.shutdown();
} catch (SchedulerException e) { 

e.printStackTrace();
}
}
/** * 从数据库中找到已经存在的job,并重新开户调度 */
public static void resumeJob() { 

try { 

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
JobKey jobKey = new JobKey("job1_1", "jGroup1");
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
//SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?
// 重新恢复在jGroup1组中,名为job1_1的 job的触发器运行
if(triggers.size() > 0){ 

for (Trigger tg : triggers) { 

// 根据类型判断
if ((tg instanceof CronTrigger) || (tg instanceof SimpleTrigger)) { 

// 恢复job运行
scheduler.resumeJob(jobKey);
}
}
scheduler.start();
}
} catch (Exception e) { 

e.printStackTrace();
}
}
}

运行结果 :数据库数据
这里写图片描述

控制台打印
这里写图片描述

Cron和Simple类型,Simple类型的如果JobDetail没有设置.storeDurably(true),则job在运行完成之后会在数据库中删除!


Quartz专栏系列

1.精进Quartz——Quartz大致介绍(一)
2.精进Quartz——Quartz简单入门Demo(二)
3.精进Quartz——Spring和Quartz集成详解
4.精进Quartz——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
5.精进Quartz源码——JobStore保存JonDetail和Trigger源码分析(一)
6.精进Quartz源码——scheduler.start()启动源码分析(二)
7.精进Quartz源码——QuartzSchedulerThread.run() 源码分析(三)
8.精进Quartz源码——Quartz调度器的Misfire处理规则(四)


谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!


不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人
精进Quartz—Quartz简单入门Demo(二)

© 每天都在变得更好的阿飞云

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121193.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux环境变量的配置_centos环境变量配置文件

    linux环境变量的配置_centos环境变量配置文件前言在自定义安装软件的时候,经常需要配置环境变量,下面进行详细解析&nbsp;环境变量配置文件|用户|配置文件||:|:||系统环境|/ect/profil

  • c#键盘钩子全解

    c#键盘钩子全解usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;//调用操作系统动态链接库usingSystem.Reflection;usingSystem.Diagnostics;usingMicrosoft.Win32;usingSys

  • 二 详解VBA编程是什么

    二 详解VBA编程是什么详解VBA编程是什么直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WORDBASIC使WORD自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化语言——–VisualBasicForApplication(VBA),可以认为VBA是非常流行的应用程序开发语言VASUALBASIC的子集.实际上VBA是”寄生于”VB应用程序的版本.V

  • Java学习路线(完整详细版)超详细

    一门永不过时的编程语言——Java软件开发。Java编程语言占比:据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。而且很多软件的开发都离不开Java编程,因此其程序员的数量最多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位!Java工程师就业:1.通过各大招聘网站统计,全国海量公司都在招聘J…

  • Mysql使用到substring截取字符串[通俗易懂]

    Mysql使用到substring截取字符串[通俗易懂]mysql截取字符串的时候是从1开始的而不是从0开始的语法:substring(str,start,len)bz:*_*的形式例子:select* fromcost wheresubstring(bz,1,1)

  • OpenCV—基本矩阵操作与示例[通俗易懂]

    OpenCV—基本矩阵操作与示例[通俗易懂]图像处理中对矩阵的操作非常重要,本文总结了使用OpenCV进行矩阵的创建、初始化以及基本矩阵操作,给出了示例代码。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号