`
13594135
  • 浏览: 193116 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring计划任务(转)

阅读更多
spring中使用的两种任务计划
[1]
spring中使用的两种任务计划,分别是:
ScheduledTimerTask: 只能指定任务与任务之间的周期,而无法指定某个特定的时间内执行某项任务.
Quartz: 推荐使用Quartz来解决这样的问题。

[2]
ScheduledTimerTask的用法:
分为继承与不继承java.util.TimerTask.
其过程如下:
1.写任务类(timerTask);
2.(非继承用timerTaskBean);
3.设置任务的schedule(scheduledTimerTask)
4.放置到任务工厂中(timerFactoryBean)
(1)
继承TimerTask用法:
写任务类:
package com.laoer.bbscs.service.task;
import java.util.Date;
import java.util.TimerTask;
public class JasonTimerTask extends TimerTask{
public void run()
{
  System.out.println("JasonTimerTask1 start.the now time is:"+new Date());
}
}
设置任务的schedule且放入任务工厂:
    <!--定义定时任务类-->
    <bean id="jasonTimerTask" class="com.laoer.bbscs.service.task.JasonTimerTask" />
    <bean id="indexScheduledTimerTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask" >
        <!--这里定义每20秒钟程序执行一次-->
        <property name="period">
           <value>20000</value>
        </property>
        <!--这里定义程序启动5秒钟后开始执行-->
        <property name="delay">
           <value>5000</value>
        </property>
        <!--这里定义定时任务的对象的位置-->
        <property name="timerTask">
           <ref local="jasonTimerTask"/>
        </property>
    </bean>
    <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean" >
        <property name="scheduledTimerTasks">
            <list>
                <ref local="indexScheduledTimerTask"/>
                <ref local="jasonHelloScheduledTimerTask"/>
            </list>
        </property>
    </bean>
(2)
不继承TimerTask用法:
1.
写任务类:
package com.laoer.bbscs.service.task;
import java.util.Date;
public class JasonHelloTimerTask {
public void execute()
{
  System.out.println("JasonTimerTask2 start. Welcome to here !");
}
}
不同的地方:
不用继承TimerTask,且方法可以自定义,不须用run();
2.
设置timerTaskBean:
    <bean id="timerTaskBean"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
        <property name="targetObject">
            <ref local="jasonHelloTimerTask"/>
        </property>
        <property name="targetMethod">
            <value>execute</value>
        </property>
    </bean>
3.
设置任务的schedule且放入任务工厂:
<bean id="jasonHelloScheduledTimerTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <property name="period">
           <value>10000</value>
        </property>
        <property name="delay">
           <value>3000</value>
        </property>
        <property name="timerTask">
           <ref local="timerTaskBean"/>
        </property>
    </bean>
    <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean" >
        <property name="scheduledTimerTasks">
            <list>
                <ref local="indexScheduledTimerTask"/>
                <ref local="jasonHelloScheduledTimerTask"/>
            </list>
        </property>
    </bean>

[3]
Quartz的用法:
Spring 则对Quartz 进行了封装,在使用上更加方便。
也分为继承与不继承QuartzJobBean.
其过程如下:
1.写任务类(jobDetailBean);
2.(非继承用MethodInvokingJobDetailFactoryBean);
3.设置任务的schedule(cronTriggerBean)
4.放置到任务工厂中(schedulerFactoryBean)
"cronExpression" 属性的分析:
指定的格式是至少六个时间元素,最多七个时间元素,例如上面的指定是每天的19 时要执行Job 一次,
"cronExpression" 属性指定的格式如下:
u        秒(0-59)
u        分(0-59)
u        小时(0-23)
u        每月第几天(1-31)
u        月(1-12 或JAN-DEC)
u        每星期第几天(1-7 或SUN-SAT)
u        年(1970-2099)
其中“每月第几天”与“每星期第几天”是互斥的,两个只能设定一个,不设定的以“?”符号编写,如果有好几个时间点,可以使用“,”符号,例如:“0 0 10,12,14 * * ? ”表示每天的10 时、12 时、14 时要执行Job;对于连续的时间可以使用 -符号,例如“0 0 10,12,14 1-15 * ? ”表示每月的1 到15 日每10 时、12 时、14 时要执行Job,时间格式中的年指定可有可无,例如:“0 0 10,12,14 ? * MON 2006 ”表示2006 年每星期一的10 时、12 时、14 时要执行Job。
(1)
继承Quartz:
任务类:
package com.laoer.bbscs.service.scheduling;
public class JasonGetPersonJob extends QuartzJobBean{
private PersonService personService;
public PersonService getPersonService() {
  return personService;
}
public void setPersonService(PersonService personService) {
  this.personService = personService;
}
public void executeInternal(JobExecutionContext arg0)
{
  PersonInfo personInfo=this.getPersonService().queryPersonInfoByName
("jason");
  System.out.println("jason 定时执行的job.获取personInfo表中jason用户的密码是
: "+personInfo.getPassword());
}
}
2.
定义任务类:
   <bean id="jasonGetPersonJobDetailBean"
class="org.springframework.scheduling.quartz.JobDetailBean">
       <property name="jobClass">
           <value>com.laoer.bbscs.service.scheduling.JasonGetPersonJob</value>
       </property>
       <property name="jobDataAsMap">
           <map>
              <entry key="personService">
                <ref bean="personService"/>
              </entry>
              <!-- 若有多个继续写下去 -->
           </map>
       </property>
   </bean>
3.
设置定点执行:
   <bean id="jasonGetPersonCronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail">
           <ref bean="jasonGetPersonJobDetailBean"/>
       </property>
       <property name="cronExpression">
           <value>30 * * * * ?</value>
       </property>
   </bean>
4.
放入工厂中:
   <bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
        <list>
           <ref bean="cronTriggerBean"/>
           <ref bean="jasonGetPersonCronTriggerBean"/>
        </list>
       </property>
   </bean>
(2)
不继承Quartz:
1.
写任务类:
public class JasonTestJob {
public void execute()
{
  System.out.println("jason 定时执行的job. 每分钟的第30秒执行一次.
Test......... !");
}
}
2.
定义任务类:
    <bean id="jasonTestJob" class="com.laoer.bbscs.service.scheduling.JasonTestJob"/>
    <bean id="testJobDetailBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
           <ref bean="jasonTestJob"/>
       </property>
       <property name="targetMethod">
           <value>execute</value>
       </property>
   </bean>
3.
设置定时执行
   <bean id="cronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerBean">
       <!--这里定义定时任务的对象的位置-->
       <property name="jobDetail">
         <ref bean="testJobDetailBean"/>
       </property>
       <!--这里定义每分钟第30秒的时候程序执行一次-->
      <property name="cronExpression">
       <value>30 * * * * ?</value>
       </property>
   </bean>
4.
放入工厂:
   <bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
        <list>
           <ref bean="cronTriggerBean"/>
           <ref bean="jasonGetPersonCronTriggerBean"/>
        </list>
       </property>
   </bean>
[4]
以上所有方法的部分输出如下:
JasonTimerTask1 start.the now time is:Thu Jun 04 15:01:18 CST 2009
JasonTimerTask2 start. Welcome to here !
jason 定时执行的job. 每分钟的第30秒执行一次. Test......... !
jason 定时执行的job.获取personInfo表中jason用户的密码是: 1234
JasonTimerTask2 start. Welcome to here !
JasonTimerTask1 start.the now time is:Thu Jun 04 15:01:38 CST 2009
JasonTimerTask2 start. Welcome to here !
JasonTimerTask2 start. Welcome to here !
JasonTimerTask1 start.the now time is:Thu Jun 04 15:01:58 CST 2009
JasonTimerTask2 start. Welcome to here !
JasonTimerTask2 start. Welcome to here !
JasonTimerTask1 start.the now time is:Thu Jun 04 15:02:18 CST 2009

[5]
使用总结:
(1)
ScheduledTimerTask与Quartz的创建过程是相同的.
1.创建任务类(分继承与不继承两种方式)
2.创建时间表类
3.放入任务工厂
(2)
ScheduledTimerTask与Quartz何时使用继承与不继承:
一般情况下,若一开始创建定时功能时,可以自由选择两种方式,都可;
若对原系统的方法添加定时功能,这时,用非继承的方法比较方便(只须指定系统类与其定时执行的方法).
(3)
如何整合ScheduledTimerTask与Quartz到系统中(即让系统现有功能添加定时执行功能):
1.整合ScheduledTimerTask与Quartz到系统中去,是采用非继承的方式.
2.只须指定要执行的系统类与其定时执行的方法即可.
具体请看: "ActiveMQ+JMS笔记"中的一实例.
分享到:
评论
2 楼 13594135 2013-10-24  
如何整合ScheduledTimerTask与Quartz到系统中(即让系统现有功能添加定时执行功能):
1.整合ScheduledTimerTask与Quartz到系统中去,是采用非继承的方式.
2.只须指定要执行的系统类与其定时执行的方法即可.
具体请看: "ActiveMQ+JMS笔记"中的一实例
1 楼 burningcloud 2011-06-17  
很详细,很实用,感谢了,正在找这方面资料。

相关推荐

    spring计划任务时间配置完整格式

    spring计划任务时间配置完整格式,各种配置说明,案例配置介绍

    Spring-quartz计划任务

    **Spring-quartz计划任务** Spring框架与Quartz的结合使用,是Java开发中常见的定时任务解决方案。Quartz是一个开源的作业调度框架,可以用来在指定的时间执行特定的任务。而Spring框架则提供了对Quartz的集成,...

    Spring定时任务管理

    Spring定时任务的几种实现,欢迎交流!

    spring定时任务关键jar包(齐全)

    2. **Spring TaskScheduler**: `TaskScheduler`接口是Spring提供的另一个核心组件,用于计划周期性的任务。与`TaskExecutor`不同,`TaskScheduler`关注的是定时任务,而不是立即执行的任务。可以使用`...

    spring 任务调度

    通过深入学习Spring任务调度,开发者可以有效地管理和执行各种定时任务,提升系统的自动化水平。在实际项目中,可以根据需求的复杂程度选择使用Spring Task或是集成Quartz。同时,理解源码有助于我们更高效地利用...

    spring2 计划任务

    标题中的“spring2 计划任务”指的是Spring框架的第二版中关于计划任务(Scheduled Tasks)的功能。在Spring框架中,计划任务允许开发者定义周期性的任务,这些任务可以在指定的时间间隔执行,例如清理缓存、发送...

    spring定时任务实现

    Spring框架提供了多种方式来实现定时任务,这使得开发者可以在不同场景下选择最适合的方案。本文主要探讨了Spring中实现定时任务的三种主要方法:Java的`java.util.Timer`、Quartz库以及Spring自身的Task调度器。 ...

    Spring实现任务调度

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地在Java环境中实现这一功能。本篇将深入探讨如何利用Spring进行任务调度,并结合代码演示和Quartz库的使用来丰富这一主题。 首先,Spring提供了两种主要的...

    Spring定时任务实现(非Web项目)

    在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...

    spring定时任务依赖的jar包

    在Java开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱,其中包括了对定时任务的支持。在Spring中,我们可以使用Spring的TaskExecution和TaskScheduling模块来实现定时任务,这些功能通常依赖于特定的jar包...

    Spring实现任务调度.rar

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地集成和管理定时任务。本资料“Spring实现任务调度”将深入探讨如何在Spring中设置和管理定时任务。 首先,我们需要理解Spring中的任务调度机制。Spring...

    spring定时任务所需jar

    例如,Quartz是一个强大的作业调度框架,可以创建复杂的定时任务计划,而CronUtils则是一个现代的,易于使用的Java库,用于解析和生成Cron表达式。 最后,如果项目中使用了Spring Boot,那么`spring-boot-starter-...

    Spring定时任务

    Spring定时任务是Spring框架中的一个强大特性,它允许开发者在应用程序中设置定时任务,以便在预定义的时间间隔执行特定的任务。这个功能对于实现自动化、批处理、数据同步、监控等多种业务场景非常有用。在本篇中,...

    Spring中定时任务

    在Spring框架中,定时任务是实现自动化操作的重要组成部分,它允许开发者在特定的时间间隔执行一些重复性的任务。本文将深入探讨Spring中的定时任务,并结合Eclipse和Maven项目环境进行讲解。 首先,Spring提供了两...

    Spring 定时任务源码(spring 三种定时任务的实现方式)

    在Spring框架中,定时任务是实现系统自动化运行关键任务的重要工具。Spring提供了多种方式来创建和管理定时任务,包括基于接口的TaskExecutor、基于注解的@Scheduled和集成Quartz Scheduler。下面将详细讲解这三种...

    spring xml 定时任务

    在Spring框架中,XML配置是传统且广泛使用的方式来设置应用的组件和行为,包括实现定时任务。定时任务在软件开发中扮演着重要角色,它允许应用程序在预设的时间执行特定的任务,例如数据清理、日志归档或者发送通知...

    spring2.0学习笔记+spring定时任务

    标题 "spring2.0学习笔记+spring定时任务" 暗示了我们即将探讨的是关于Spring框架2.0版本的学习心得以及如何在Spring中配置和使用定时任务。在这个主题下,我们将深入理解Spring的核心概念,特别是它在企业级Java...

    Spring与java计划任务项目,本人亲切可用。

    本项目"Spring与java计划任务项目"旨在帮助开发者,尤其是新手,理解并掌握如何在Spring环境中使用Quartz实现任务调度。 Spring框架通过其`TaskExecution`和`TaskScheduling`模块提供了一种轻量级的方式来处理计划...

    spring定时任务实例

    在Spring框架中,定时任务是一项重要的功能,它允许开发者在特定的时间间隔内执行特定的任务,无需手动触发。这个实例是关于如何在Spring中配置和使用定时任务,同时结合MyBatis来向数据库插入数据。接下来,我们将...

Global site tag (gtag.js) - Google Analytics