Quartz -----定时任务框架
(2)有了任务后,还需要一个能够实现触发任务去执行的触发器,触发器Traigger最基本的功能是指定job的执行时间,执行间隔,运行次数等

      
二、Quartz Demo搭建
下面来利用Quartz搭建一个最基本的Demo。
1、导入依赖的jar包:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2.配置信息
# 名为:quartz.properties,放置在classpath下,如果没有此配置则按默认配置启动
# 指定调度器名称,非实现类
org.quartz.scheduler.instanceName = DefaultQuartzScheduler04
# 指定线程池实现类
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
# 线程池线程数量
org.quartz.threadPool.threadCount = 10
# 优先级,默认5
org.quartz.threadPool.threadPriority = 5
# 非持久化job
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
3、新建一个能够打印任意内容的Job:
public class PrintWordsJob implements Job{
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String printTime = new SimpleDateFormat("yy-MM-dd HH-mm-ss").format(new Date());
        System.out.println("PrintWordsJob start at:" + printTime + ", prints: Hello Job-" + new Random().nextInt(100));
    }
}
4、创建Schedule,执行任务:
public class MyScheduler {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        // 1、创建调度器Scheduler
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        // 2、创建JobDetail实例,并与PrintWordsJob类绑定(Job执行内容)
        JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                                        .withIdentity("job1", "group1").build();
        // 3、构建Trigger实例,每隔1s执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
                .startNow()//立即生效
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(1)//每隔1s执行一次
                .repeatForever()).build();//一直执行
        //4、执行
        scheduler.scheduleJob(jobDetail, trigger);
        System.out.println("--------scheduler start ! ------------");
        scheduler.start();
        //睡眠
        TimeUnit.MINUTES.sleep(1);
        scheduler.shutdown();
        System.out.println("--------scheduler shutdown ! ------------");
    }
}
运行程序,可以看到程序每隔1s会打印出内容,且在一分钟后结束:

三、Quartz核心详解
下面就程序中出现的几个参数,看一下Quartz框架中的几个重要参数:
- Job和JobDetail
 - JobExecutionContext
 - JobDataMap
 - Trigger、SimpleTrigger、CronTrigger
 
2.JobExecutionContext
  JobExecutionContext中包含了Quartz运行时的环境以及Job本身的详细数据信息。
当Schedule调度执行一个Job的时候,就会将JobExecutionContext传递给该Job的execute()中,Job就可以通过JobExecutionContext对象获取信息。

3.JobDataMap
  JobDataMap实现了JDK的Map接口,可以以Key-Value的形式存储数据。
  JobDetail、Trigger都可以使用JobDataMap来设置一些参数或信息,
  Job执行execute()方法的时候,JobExecutionContext可以获取到JobExecutionContext中的信息:
4.Trigger、SimpleTrigger、CronTrigger
[秒] [分] [小时] [日] [月] [周] [年]


下面的代码就实现了每周一到周五上午15:00执行定时任务
public class MyScheduler2 {
    public static void main(String[] args) throws SchedulerException {
        //创建调度器Scheduler
        SchedulerFactory schedulerFactory=new StdSchedulerFactory();
        Scheduler scheduler=schedulerFactory.getScheduler();
        //创建jobDetail实例,并与printWordsJob类绑定(job执行内容)
        JobDetail jobDetail= JobBuilder.newJob(PrintWordsJob.class).usingJobData("jobDetail1","这个job用来测试的")
                .withIdentity("job1","group1").build();
        //构建Trigger实例,每隔一秒执行一次
        //实现程序运行5s后开始执行Job,执行Job 5s后结束执行:
        Date startDate=new Date();
        startDate.setTime(startDate.getTime()+5000);
        Date endDate=new Date();
        endDate.setTime(startDate.getTime()+5000);
        CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
                .usingJobData("trigger1", "这是jobDetail1的trigger")
                .startNow()
                .startAt(startDate)
                .endAt(endDate)
                .withSchedule(CronScheduleBuilder.cronSchedule("* 00 15 ? * 1/5 2019")).build();
        scheduler.scheduleJob(jobDetail,cronTrigger);
        System.out.println("--------scheduler start ! ------------");
        scheduler.start();
        System.out.println("--------scheduler shutdown ! ------------");
    }
}
原文链接:https://blog.csdn.net/noaman_wgs/article/details/80984873
Quartz -----定时任务框架的更多相关文章
- quartz定时任务框架的使用
		
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
 - quartz定时任务框架的使用以及原理
		
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
 - (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 - Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
原文地址:http://www.cnblogs.com/obullxl/archive/2011/07/10/spring-quartz-cron-integration.html 在JavaEE系统 ...
 - Spring_Spring集成Quartz定时任务框架介绍和Cron表达式详解
		
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 - Spring集成Quartz定时任务框架介绍
		
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
 - quartz定时任务框架调度机制解析
		
转自集群调度机制调研及源码分析 quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 qurat ...
 - 集群式Quartz定时任务框架实践
		
在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz.无论使用哪种,都需要解决一个问题,那就是集群问题.一般情况下,定时任务能且仅能运行 ...
 - maven项目集成Quartz定时任务框架,实现批处理功能
		
一.Quartz简介 主要做定时任务,即:在指定时间点或时间段,执行某项任务,可设置执行次数.时间间隔等. 二.Springcloud简介 对比传统的.庞大的.复杂的.以ssm或ssh为框架的web项 ...
 
随机推荐
- kaildi讲解
			
转载声明:本文为转载文章 作者:ferb2015 原文地址:https://blog.csdn.net/eqiang8848/article/details/81543599 kaldi是一个开源的语 ...
 - Eclipse中 Run as --->Maven build 命令详解
			
Maven Build Goals: clean 清除编译,compile 编译,test 编译并测试,install 打包并发送到本地仓库,package 只是打成jar包,并不会发送到本地 ...
 - 51nod 1122:机器人走方格 V4 (矩阵快速幂)
			
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...
 - chromedriver与chrome版本映射表(更新至v2.46)
			
chromedriver版本 支持的Chrome版本 v2.46 v71-73 v2.45 v70-72 v2.44 v69-71 v2.43 v69-71 v2.42 v68-70 v2.41 v6 ...
 - Linux操作系统之安全审计功能
			
内核编译时,一般打开NET选项就打开AUDIT选项了.在系统中查看audit是否打开,root 用户执行:service auditd status 我们知道在Linux系统中有大量的日志文件可以用于 ...
 - vue数据渲染、条件判断及列表循环
			
1.数据渲染 {{msg}} <template> <div id="app"> {{msg}} </div> </template&g ...
 - BeautifulSoup的用法
			
BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. ...
 - 2018-2019-2 实验四 Android程序设计
			
实验要求 参考Android开发简易教程 完成云班课中的检查点,也可以先完成实验报告,直接提交.注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明.实验报告中一个检查点要有多张截图. 发表 ...
 - 2018-2019-2 20175105王鑫浩《Java程序设计》实验三 《敏捷开发与XP实践》
			
实验三 <敏捷开发与XP实践> 实验报告封面 课程:Java程序设计 班级:1751班 姓名:王鑫浩 学号:20175105 指导教师:王鑫浩 实验日期:2019年4月29日 实验时间:- ...
 - PHP抓取远程图片到本地保存(如何把错误信息用text文件写入)
			
最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储.于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码. /** * PHP将网页上的图片攫取到本 ...