任务计划
对于任务计划定时执行,JDK提供了java.util.Timer与java.util.TimerTask类。而Timer功能有限,只能指定任务与任务之间的周期,无法指定某个时间点定时执行任务,可以使用Quartz,它提供了更多的任务计划功能。
1:使用TimerTask
A: 定义1个计划任务
package onlyfun.bb.timertask;
import java.util.TimerTask;
/**
* 1:首先定义1个计划任务(Task),继承TimerTask.
* 2:使用ScheduledTimerTask定义任务的执行周期.
* @author Administrator
*
*/
public class DemoTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Takk is executed");
}
}
B: 在applicationContext.xml配置如下:
<beans>
<bean id="demoTask" class="onlyfun.bb.timertask.DemoTask"></bean>
<bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="demoTask"></property>
<property name="period" value="1000"></property>
<!--period定义任务执行间隔,单位毫秒-->
<property name="delay" value="1000"></property>
<!--delay定义启动后,在第一次执行任务前要延迟多少毫秒-->
</bean>
<bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTimerTask"/>
</list>
</property>
</bean>
注意:
C: 测试
package onlyfun.bb.timertask;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.*;
import java.util.Timer;
public class TestDemoTask {
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("启动Task:");
System.out.println("请输入 exit 结束Task:");
//A处
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
while(true){
if(reader.readLine().equals("exit")) break;
}
//此句可以放在A处
Timer timer=(Timer)context.getBean("timerFactoryBean");
timer.cancel();
} }
2:使用MethodInvokingTimerTaskFactoryBean制订任务
使用Spring,不一定要继承TimerTask来定义1个Task.
Spring也可以使用MethodInvokingTimerTaskFactoryBean类直接指定执行某个对象的方法.
A: 制定任务(普通类,不需要继承TimerTask)
package onlyfun.bb.timertask;
public class DemoTask2 {
public void execute(){
System.out.println("Task is executed without extends TimerTask");
}
}
B: 配置(注意与方法1的比较:粗体部分)
<!-- task: without extends TimerTask -->
<bean id="demoTask2" class="onlyfun.bb.timertask.DemoTask2"></bean>
<bean id="timerTaksBean" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="demoTask2"></property>
<property name="targetMethod" value="execute"></property>
</bean>
<bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="timerTaksBean"></property>
<property name="period" value="1000"></property>
<property name="delay" value="1000"></property>
</bean>
<bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTimerTask"/>
</list>
</property>
</bean>
C: 测试——与方法1的测试一样。
3:使用TimerTask定制任务,程序直接启动任务。
(参考D:/workspace/SpringTimer项目)
3.1 定制任务类MainTask
package timer;
import java.util.TimerTask;
public class MainTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("你好 等会而见");
}
}
3.2 采用程序直接启动的方式启动定时任务
package timer;
import java.util.Timer;
public class TestMainTask {
public void run(){
Timer timer=new Timer();
timer.schedule(new MainTask(),2000,1000);
//(定时任务类,任务首次启动时间,间隔时间)。其中任务首次启动时间以ms为单位,计算延期时间。
}
public static void main(String args[]){
//运行下面2句可以直接启动任务
TestMainTask tm=new TestMainTask();
tm.run();
}
}
运行程序输出:
你好 等会而见
你好 等会而见
你好 等会而见
3.3 采用Spring框架管理任务类,并且容器来启动启动定时任务
添加配置:applicationContext.xml (该文件默认在src下 )
<beans>
<bean id="mainTask" class="timer.MainTask"></bean>
<!-- 注册定时器信息 -->
<bean id="sTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="delay">
<value>1000</value>
</property>
分享到:
相关推荐
spring + jdk TimerTask定时器 完整可运行
spring 定时器 内含TimerTask实现和Quartz实现两种方式
NULL 博文链接:https://zhujianpengzha.iteye.com/blog/1714713
主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
利用jdk中的timer和timertask来实现,每天定时执行的任务。
Android中使用定时器TimerTask类介绍.txt Android中使用定时器TimerTask类介绍.txt
Spring中使用TimerTask和Quartz 博文链接:https://yefriendly.iteye.com/blog/404389
本文档主要讲述的是Java中的Timer和TimerTask的使用;Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类。希望本文档会给有需要...
这是一个自动创建文件夹的定时任务,并且使用java代码直接操纵svn上传,无需手动操纵svn。内容仅供大家参考学习,本人不是高手,若有不足之处请大家见谅,并请大家提出宝贵意见,谢谢!
工作中常常会有定时任务的开发需求,特别是移动端。最近笔者正好有所涉及,鉴于此,结合开发中的案例说明一下几种定时任务的 退出 。 需求说明 :定时更新正在生成的文件大小和状态【进行中、失败、完成】,如果...
环境MyEclipse,tomcat,jdk Spring2定时任务 定时触发
Timer和TimerTask的使用 关于java函数中timer类的相关代码 和使用
如果你设定在凌晨2点执行任务。但你是在2点以后 发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况 发生,只能判断一下,如果发布或重启服务的时间晚...
两种方式实现定时执行任务操作,通过spring中集成的timerTask,包含源码及用到的jar包
NULL 博文链接:https://fly2000.iteye.com/blog/292847
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
Java中的Timer和TimerTask简介(附完整代码实例)。 在Java中,Timer和TimerTask是两个经常用来实现定时器的类。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求。 Timer是一种定时器工具,用来在一...
主要介绍了Java 中Timer和TimerTask 定时器和定时任务使用的例子,非常具有实用价值,需要的朋友可以参考下
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1199750
timerTask实现每天定时一段时间内执行定时任务,这个是自己写的代码,有些和我的项目有关,可以删掉,但是其主要的都在里面,我写了注释。