您熟悉使用最后一次降价后,由于种种原因一直没有时间更新我的博客…成群结队地总结的一些东西,然后在我的博客上写希望用来快速记住 ~ —————————————华丽的分割线——————————————– 2.1 java.util.Timer 类 cancel (取消) TimerTask 类方法摘要 cancel (布尔值) 2.1.2 使用方法 使用计时器类附表 TimerTask 任务,长时间的延迟 (长期) 方法来启动计时器。 2.1.3 扩展 (计时方法参数) 2.2 后 Spring3.0 的春天任务 第一 ︰ 配置文件 ③ 设置弹簧配置文件特定的任务 说明 ︰ ref 参数指定任务类、 方法指定需要运行,cronExpression 和 cron 表达式,具体措辞不盖这里,详见附录的方法。 第二 ︰ 用笔记的形式 说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式,具体写法这里不介绍了,详情见附录。 第二种:使用注解形式 注意:此处@Schedule注解有三个方法或者叫参数,分别表示的意思是: ②添加task相关的配置 说明:理论上只需要加上《task:annotation-driven /》这句配置就可以了,这些参数都不是必须的。 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.2.2。下面将介绍两种Quartz使用方式: 第一种:作业类继承自特定的基类 ②spring配置文件中配置作业类JobDetailBean 说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。 ③配置作业调度的触发方式(触发器) 0
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。 1
④配置调度工厂 2
说明:该参数指定的就是之前配置的触发器的名字。 ⑤启动你的应用即可,即将工程部署至tomcat或其他容器。 第二种:作业类不继承特定基类(推荐使用) 3
②配置作业类 4
说明:这一步是关键步骤,声明一个MethodInvokingJobDetailFactoryBean,有两个关键属性:targetObject指定任务类,targetMethod指定运行的方法。 ③配置作业调度的触发方式(触发器) 5
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。 6
④配置调度工厂 7
说明:该参数指定的就是之前配置的触发器的名字。 ①配置多个定时器任务 8
②动态修改定时器任务调度时间周期(关键字:quartz change cron expression runtime) 9 这篇博文到这里就结束了,希望下次有时间可以多添加一些图表等更加形象的内容。 在开发应用程序,通常需要定期的行动,如 ︰ 分析的每天早上需要时前一天的日志信息,每隔 5 分钟,检查是否有异常然后模块自动发送一条消息给管理员,第 30 天在项目运行时您需要执行一些操作,等等。我们需要这些功能要求使用计划的任务来完成,我们将介绍几种常用的 J2EE 项目计时方法,并比较其优缺点。
2.1.1 简介
首先介绍 Java 的 java.util.Timer 类,此类允许您安排 java.util.TimerTask 任务。使用这种方法允许您处理基于某些频率的执行,但不在指定的时间运行。用于实现计时器 TimerTask 类安排一次或重复执行的任务。每个对象对应一个线程,所以应尽快完成计时器执行任务的计时器,否则他们将会延迟后续任务。
Java.util.Timer 类方法摘要
终止此计时器,丢弃所有目前预定任务。
int purge()
删除所有从这个计时器队列任务已被取消。
无效的日程安排 (TimerTask 任务,日期时间)
安排在指定的时间执行指定的任务。
无效的时间表 (TimerTask 任务、 日期第一次,长时间)
安排在指定的时间的固定延迟执行指定重复的任务。
无效的日程安排 (TimerTask 任务,长时间的延迟)
安排在指定的延迟后,执行指定的任务。
无效的日程 TimerTask 任务,长时间的延迟 (长时间)
计划开始后指定的延迟重复固定延迟的执行指定的任务。
无效的 scheduleAtFixedRate TimerTask 任务、 日期首次 (长时间)
安排指定在指定的时间的固定的利率执行重复任务。
无效的 scheduleAtFixedRate TimerTask 任务,长时间的延迟 (长时间)
计划在指定的延迟重复固定的利率实施后开始指定的任务。
取消此计时器任务。
抽象的 void run ()
你想去哪些的任务执行操作。
长 scheduledExecutionTime()
返回此最近的做法的时间表执行时间。TimerTask 类主要在运行 () 方法在业务逻辑中,用法如下 ︰
Timer timer=new Timer(); MyTask myTask=new MyTask(); timer.schedule(myTask, 1000, 2000);
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
2.2.1 配置文件
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class WaitListTimerTask extends TimerTask { private WaitList waitList; public WaitListTimerTask(WaitList waitList){ this.waitList=waitList; } @Override public void run() { // 参数waitList使用示例 List<CourseWaitList> allCourseWaitList = this.waitList.getAllCourseWaitList(); } }
Spring3.0 以后计划的任务工具弹簧任务被开发,它可以比作一个轻量级的石英,使用简单、 除了春天相关的包不需要额外的软件包,而且支持两种形式的笔记和配置文件,下面将介绍两种方式。
2.2.2 使用方法
① 准备工作类
简单的 POJO,如下 ︰② 在 spring 配置文件,添加一个命名空间和描述
import org.springframework.stereotype.Service; @Service public class TaskJob { public void job1() { System.out.println(“任务进行中。。。”); } }
此配置是根据实际情况在哪里春天扫描注意调整。<beans xmlns="https://www.springframework.org/schema/beans" xmlns:task="https://www.springframework.org/schema/task" …… xsi:schemaLocation="https://www.springframework.org/schema/task https://www.springframework.org/schema/task/spring-task-3.0.xsd">
① 准备工作类
简单的 POJO,如下 ︰<task:scheduled-tasks> <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/> </task:scheduled-tasks> <context:component-scan base-package=" com.gy.mytask " />
这个配置根据项目实际情况调整包的位置,spring扫描注解用的。
①编写作业类
即普通的pojo,如下:import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component(“taskJob”) public class TaskJob { @Scheduled(cron = "0 0 3 * * ?") public void job1() { System.out.println(“任务进行中。。。”); } }
cron:指定cron表达式
fixedDelay:即表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。
fixedRate:即从上一个任务开始到下一个任务开始的间隔,单位是毫秒。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="https://www.springframework.org/schema/beans" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:context="https://www.springframework.org/schema/context" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:task="https://www.springframework.org/schema/task" xsi:schemaLocation=" https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd https://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-3.0.xsd https://www.springframework.org/schema/context https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-3.0.xsd https://www.springframework.org/schema/task https://www.springframework.org/schema/task/spring-task-3.0.xsd" default-lazy-init="false"> <context:annotation-config /> <!—spring扫描注解的配置 --> <context:component-scan base-package="com.gy.mytask" /> <!—开启这个配置,spring才能识别@Scheduled注解 --> <task:annotation-driven scheduler="qbScheduler" mode="proxy"/> <task:scheduler id="qbScheduler" pool-size="10"/>
2.3 定时任务框架Quartz
2.3.1 简介
2.3.2 使用方法
org.springframework.scheduling.quartz.QuartzJobBean
①编写作业类import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class Job1 extends QuartzJobBean { private int timeout; private static int i = 0; //调度工厂实例化后,经过timeout时间开始执行调度 public void setTimeout(int timeout) { this.timeout = timeout; } /** * 要调度的具体任务 */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行中…"); } }
<bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.gy.Job1" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下:import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
配置方式如下:import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
①编写作业类(普通POJO)import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下:import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
配置方式如下:import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
⑤启动你的应用即可,即将工程部署至tomcat或其他容器。2.2.3 扩展内容
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
注意:目前只在Quartz1.8.6版本下测试成功import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub SimpleDateFormat simpleDateFormat=null; simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); System.out.println("当前的系统时间为:"+simpleDateFormat.format(new Date())); } }
3 总结与分析
~
Timer
Spring-Task
Quartz
作业类的继承方式
java.util.Timer中需要继承自java.util.TimerTask
普通的java类,不需要继承其他类
继承自org.springframework.scheduling.quartz.QuartzJobBean
是否可以使用Cron表达式
不可以
可以
可以
动态改变执行时间周期
可以,但是使用不灵活
资料太少,未找到相关方法
可以,将触发器重新启动即可重新调度任务(资料较多,目前只在Quartz1.8.6版本测试通过)
使用难易程度
简单
简单
稍难,需要配置的部分相对较多且繁琐
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox.5.1.6_Build20151120_CHS_Bit32.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 程序员专区