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. 我的tensorflow学习1

    1.神经元被分成了多层,层与层之间的神经元有连接,而层内之间的神经元没有连接.最左边的层叫做输入层,这层负责接收输入数据:最右边的层叫输出层,我们可以从这层获取神经网络输出数据.输入层和输出层之间的层 ...

  2. xadmin系列之单实例模式

    先看下单实例的定义 python的模块实现单例模式是python语言特有的,python的模块天然就是单例的,因为python有个pyc文件,导入一次后,第二次导入直接从pyc中取数据了 这里我们主要 ...

  3. java常量类编译问题

    常量类编译后并不在.class文件中呈现,取而代之的是各个具体的常量.例如: 编译前:(Constant.OPTIONSRADIO常量值为1) 编译后: 应用场景 1,项目编译后发布项目前可以删除常量 ...

  4. Redis 与Spring-data-redis 整合后封装的工具类

    此工具类方法是使用了redis 与spring 整合后,才可以使用的工具类,将 spring-data-redis 一些我们开发中常用的方法进行了封装,方便我们日常开发中进行调用: package c ...

  5. ARM板移植udev-126

    下载udev-126.tar.xz 下载的网址为: https://mirrors.edge.kernel.org/pub/linux/utils/kernel/hotplug/ 解压文件并且编译 # ...

  6. linux命令学习之:mv

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 命令格式    mv [选项] 源文件或目 ...

  7. cherry-pick 命令

    拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上. 这种方式在你只想引入特性分支中的某个提交时很有用. 假设你的项目提交历史如下: 如果你希望将提交 e43a6 拉取到 master 分支, ...

  8. Object转为Bigdecimal

    import java.math.BigDecimal; import java.math.BigInteger; public class MathUtils { public static Big ...

  9. 史上最全的MSSQL复习笔记

    1.什么是SQL语句 SQL语言,结构化的查询语言(Structured Query Language),是关系数据库管理系统的标准语言.它是一种解释语言,写一句执行一句,不需要整体编译执行. 语法特 ...

  10. Charles抓取https包

    Android: 1.若滑动解锁,请先设置屏幕锁: 2.然后浏览器输入Charlesproxy.com/getssl,安装证书,出现安装证书提示,随便打个名称 比如Android,选择WLAN(这里A ...