1.关于Quartz的配置文件说明

#
# Quartz会优先读取项目下我们自定义这个quartz.properties配置文件 否则会去读取quartzjar包下org.quatrz包
# 下面的那个quartz.properties
#
#调度器属性部分
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.instanceid:AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
#线程池属性
#线程池的实现类(一般SimpleThreadPool可以满足所有用户的需求)
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
#指定线程数 至少为1
org.quartz.threadPool.threadCount: 10
#指定线程的优先级 最大为10 最小为1
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

2.创建一个job 编写我们定时器要执行的任务

package cn.gc.helloquartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;
/**
* Quartz 业务逻辑层 实现Job 重写execute方法
*
* 主要三个组件 Job Scheduler trieger
* @author Superb
*
*/
public class HelloJob implements Job{
private String message;
private double math;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
Date date=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(date));
//获取该job的基本信息 name是什么 属于哪个组
JobKey key=context.getJobDetail().getKey();
key.getName();
key.getGroup();
TriggerKey triggerKey=context.getTrigger().getKey();
triggerKey.getName();
triggerKey.getGroup();
/*获取Scheduler传入JobDetail中的参数 和trigger中的参数
(1.直接从Map中获取,2.Job实现类添加对应Map中键值的属性,并加get set方法,然后使用属性自动会获取相应的值)*/
//第一种方法
//分开获取JobDetail和trigger的JobDataMap
/*还可以拿到他们共同的JobDataMap 这种情况当jobDatil和trigger中有key值相同的情况
jobDataMap只获取trigger中的参数值
JobDataMap mergerdDataMap=context.getMergedJobDataMap();*/
/*JobDataMap jobDataMap=context.getJobDetail().getJobDataMap();
String jobMessage=jobDataMap.getString("message");
System.out.println(jobMessage);
float f=jobDataMap.getFloat("math");
System.out.println(f);
JobDataMap triggerDataMap=context.getTrigger().getJobDataMap();
String triMessage=triggerDataMap.getString("message");
System.out.println(triMessage);
double d=triggerDataMap.getDouble("math");
System.out.println(d);*/

//第二种方法 建立JobDataMap中对应键值的成员属性 加上get set方法 直接拿去成员变量得值

System.out.println(message);
System.out.println(math);
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public double getMath() {
return math;
}

public void setMath(double math) {
this.math = math;
}

}

3.创建一个Scheduler执行我们的job任务

package cn.gc.helloquartz;

import java.util.Date;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
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.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
//创建一个jobDetail实列与创建的Job绑定
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1")
//jobDetail和trigger均可以使用usingJobData方法传入参数
//在我们的Job实现类中均可以JobExecutionContext获取这些参数值
.usingJobData("message", "jobDetail")
.usingJobData("math", 8.20F)
.build();
//创建一个Trigger实列 定义该job立即执行 并每2秒执行一次
/*Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
.usingJobData("message", "trigger")
.usingJobData("math", 55.0D)
//设置触发器执行的开始时间和结束时间
//.startAt(new Date()).endAt(new Date())
//表示程序一启动就立马执行
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().
//每两秒 无线重复的执行下去、
withIntervalInSeconds(2).repeatForever()).build();*/

SimpleTrigger trigger=(SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
.startAt(new Date())
//.endAt(triggerEndTime)
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
//2你们秒执行一次
.withIntervalInMilliseconds(2)
//一直执行下去
//.withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)
//执行多少次
.withRepeatCount(10)).build();

//输出jobDetail的name值“myJob”
System.out.println(jobDetail.getKey().getName());
//输出jobDetail的group分组名 如果在创建jobDetail时不设置分组 则默认分在DEFAULT分组中
System.out.println(jobDetail.getKey().getGroup());
//trigger(触发器和上面jobDetail是一样可以获取name值和分组名)
System.out.println(trigger.getKey().getName());
System.out.println(trigger.getKey().getGroup());
//创建schedule实列
SchedulerFactory sFactory=new StdSchedulerFactory();
Scheduler scheduler=sFactory.getScheduler();
//启动任务
scheduler.start();
//挂起任务 当我们再次调用start()方法时就可以重新启动任务
//scheduler.standby();
//关闭任务可以传入参数bulean true等待所有的job任务执行完毕再关闭,false直接关闭 默认就是false 这个是不能再次调用start()方法的
scheduler.shutdown();
//返回一个Date 指的是最近要出发的一次执行时间
scheduler.scheduleJob(jobDetail, trigger);
}

//使用Trigger实现定时器
public void Trigger() throws SchedulerException{
//创建一个jobDetail实列与创建的Job绑定
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1")
//jobDetail和trigger均可以使用usingJobData方法传入参数
//在我们的Job实现类中均可以JobExecutionContext获取这些参数值
.usingJobData("message", "jobDetail")
.usingJobData("math", 8.20F)
.build();
//创建一个Trigger实列 定义该job立即执行 并每2秒执行一次
Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
.usingJobData("message", "trigger")
.usingJobData("math", 55.0D)
//设置触发器执行的开始时间和结束时间
//.startAt(new Date()).endAt(new Date())
//表示程序一启动就立马执行
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().
//每两秒 无线重复的执行下去
withIntervalInSeconds(2).repeatForever()).build();
//输出jobDetail的name值“myJob”
System.out.println(jobDetail.getKey().getName());
//输出jobDetail的group分组名 如果在创建jobDetail时不设置分组 则默认分在DEFAULT分组中
System.out.println(jobDetail.getKey().getGroup());
//trigger(触发器和上面jobDetail是一样可以获取name值和分组名)
System.out.println(trigger.getKey().getName());
System.out.println(trigger.getKey().getGroup());
//创建schedule实列
SchedulerFactory sFactory=new StdSchedulerFactory();
Scheduler scheduler=sFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
//使用SimpleTrigger进行定时任务的执行
public void SimpleTrigger() throws SchedulerException{
//创建一个jobDetail实列与创建的Job绑定
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1")
//jobDetail和trigger均可以使用usingJobData方法传入参数
//在我们的Job实现类中均可以JobExecutionContext获取这些参数值
.usingJobData("message", "jobDetail")
.usingJobData("math", 8.20F)
.build();
SimpleTrigger trigger=(SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
.startAt(new Date())
//.endAt(triggerEndTime)
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
//2秒执行一次
.withIntervalInMilliseconds(2)
//一直执行下去
//.withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)
//执行多少次
.withRepeatCount(10)).build();

//输出jobDetail的name值“myJob”
System.out.println(jobDetail.getKey().getName());
//输出jobDetail的group分组名 如果在创建jobDetail时不设置分组 则默认分在DEFAULT分组中
System.out.println(jobDetail.getKey().getGroup());
//trigger(触发器和上面jobDetail是一样可以获取name值和分组名)
System.out.println(trigger.getKey().getName());
System.out.println(trigger.getKey().getGroup());
//创建schedule实列
SchedulerFactory sFactory=new StdSchedulerFactory();
Scheduler scheduler=sFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}

//使用CronTrigger 来进行定时任务的调度 CornTrigger最强大 最常用
public void CronTrigger(){
//创建一个JobDetail与Job实列绑定 //不传入分组参数时 默认属于DEFAULT分组中
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();
CronTrigger trigger=(CronTrigger) TriggerBuilder.newTrigger()
.withIdentity("cronTrigger", "group1")
.withSchedule(
//创建Cron表达式 格式(秒 分 时 日 月 周 年)
//这个表示每秒都执行
CronScheduleBuilder.cronSchedule("* * * * ? * *")
).build();
}
}

Quartz(强大的定时器)的更多相关文章

  1. Spring整合Quartz实现动态定时器

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  2. spring quartz整合实现定时器自动注解

    1.web.xml中添加侦听器 <listener>    <listener-class>org.springframework.web.context.ContextLoa ...

  3. Spring整合Quartz实现动态定时器,相关api,定时器添加,删除,修改

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  4. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  5. 补习系列(9)-springboot 定时器,你用对了吗

    目录 简介 一.应用启动任务 二.JDK 自带调度线程池 三.@Scheduled 定制 @Scheduled 线程池 四.@Async 定制 @Async 线程池 小结 简介 大多数的应用程序都离不 ...

  6. spring定时器(二)

    此定时器可重置定时时间. 1. spring的定时器配置文件application.xml: <?xml version="1.0" encoding="UTF-8 ...

  7. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

    一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...

  8. spring quartz开发中使用demo

    1.首先在pom.xml中配置quartz的jar: <!--定时器--> <dependency> <groupId>org.quartz-scheduler&l ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(84)-Quartz 作业调度用法详解一

    前言 我从Quartz2.0开始使用,并对其进行了封装了界面,可以参考 http://www.cnblogs.com/ymnets/p/5065154.html 最近拿出来进行了优化,并升级到最新版, ...

随机推荐

  1. Linux下常用的编辑文件与保存命令

    打开文件: vi aaa.conf 编辑: i 编辑结束,按ESC 键 跳到命令模式,然后输入退出命令: :w (write)保存文件但不退出vi 编辑 :w! 强制保存,不退出vi 编辑 :w fi ...

  2. linux下主从同步和redis的用法

    前言 mariadb其实就是mysql mysql已经被oracle收购,它即将闭源,马上要开始收费了因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb 操 ...

  3. f5 irules

    1.插入XFF when HTTP_REQUEST { if { [HTTP::header exists X-Forward-For] } { set old_xff [HTTP::header v ...

  4. 使用GitHub管理代码

    第一步:注册GitHub账户. 第二步:下载GitHub desktop. 第三步:打开软件界面之后请使用鼠标点击左上角的“file”选项按钮,选择添加本地文件. 第四步:导入文件 第五步:在左下角大 ...

  5. sqlite 数据库错误 The database disk image is malformed database disk image

    收银机上的sqlite数据库经常出现这种错误,错误的原因有可能是突然断电或是一些不规范操作导致的. 网上一般的做法有两种: 方法一: 1.在https://www.sqlite.org/downloa ...

  6. golang语言中os/user包的学习与使用

    package main; import ( "os/user" "fmt" ) func main() { //返回当前用户的结构 u, _ := user. ...

  7. Vue 全局注册逐渐 和 局部注册组件

    //定义一个名为 button-counter 的新组件 Script: Vue.component('button-counter',{//button-counter 这个是组件的名字 data: ...

  8. gcc编译器如何生成指定的文件名

    放哪里都可以,进到文件所放路径,用gcc编译器编译.如:gcc -o test test.c 就是说把test.c文件编译链接生成test可执行程序.在linux下生成test.out,然后再命令:. ...

  9. c#启动windows服务问题总结

    程序以管理员权限运行的原因 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下 ...

  10. PAT 甲级 1008 Elevator (20)(代码)

    1008 Elevator (20)(20 分) The highest building in our city has only one elevator. A request list is m ...