`
ming_fanglin
  • 浏览: 227096 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring的任务调度服务实例讲解

阅读更多

spring 任务调度总结
参考资料
http://www.ibm.com/developerworks/cn/java/j-quartz/
http://www.opensymphony.com/quartz/download.action

Java的Timer类和OpenSymphony的Quartz调度器是两个流行的调度API。Spring为这两个调度器提供了一个抽象层,可以更容易的使用他们


spring+timer

1 .使用java Timer调度任务
第一步 web.xml
<!--*********************** spring setting ***********************-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/classes/applicationContextTimeTask.xml
        </param-value>
    </context-param>
第二步  配置applicationContextTimeTask.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <!--
     ****************使用java Timer调度任务*********************
     使用java Timer调度第一步是从java.util.TimerTask派生一个任务
     声明本身只是将EmailReportTask放到应用上下文,
    并在testBean属性装配TestBean
    在调度之前不会做任何事。
    -->
    <bean id="testBean" class="com.photo.test.TestBean"/>
    <bean id="reportTimerTask" class="com.photo.task.EmailReportTask">
        <property name="testBean">
            <ref bean="testBean"/>
        </property>
    </bean>
    <!--
    Spring的ScheduledTimerTimerTask定义了一个定时器任务的运行周期。应该如下装配一个ScheduledTimerTask
    timerTask告诉ScheduledTimerTask运行哪个TimerTask,
    这里该装配属性指向reportTimerTask的一个引用。
    属性period告诉ScheduledTimerTask以怎样的频率调用TimerTask的run()方法。
    这个属性以毫秒作为单位,
    86400000指定该任务每24小时运行一次
    10X1000
     属性scheduledTimerTasks  要求一个需要启动的定时器任务列表。
     ScheduledTimerTask有一个delay属性, 允许你指定当任务第一次运行之前应该等多久。
     如,EmailReportTask的第一次运行延迟5毫秒
    -->


    <bean id="scheduledReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <property name="timerTask">
            <ref bean="reportTimerTask"/>
        </property>
        <property name="period">
            <value>10000</value>
        </property>
        <property name="delay">
            <value>5000</value>
        </property>
    </bean>
    <!--Spring 的TimerFactoryBean负责启动定时任务。按以下方式在Spring配置文件里声明它-->
    <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
        <property name="scheduledTimerTasks">
            <list>
                <ref bean="scheduledReportTask"/>
            </list>
        </property>
    </bean>
</beans> 
第三步 相关类的编写
EmailReportTask.java
public class EmailReportTask extends TimerTask {//必需继承TimerTask
     Log log= LogFactory.getLog(EmailReportTask.class);
     public EmailReportTask() {
     }

     public void run() {//这个函数是调度任务执行的入口
        log.debug("task begin :"+testBean.greeting);
     }

     private TestBean testBean;//这里实现spring的依赖注入

     public void setTestBean(TestBean testBean) {
         this.testBean = testBean;
     }
}
testBean.java
public class TestBean {
     public String greeting="hello,world";
}


spring+Quartz
Quartz 作业调度框架所提供的 API 在两方面都表现极佳:既全面强大,又易于使用。Quartz 可以用于简单的作业触发,也可以用于复杂的 JDBC 持久的作业存储和执行。
第一步  同上
第二步  配置applicationContextTimeTask.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass">
   <value>com.photo.task.EmailReportTask2</value>
  </property>
  <property name="jobDataAsMap">
   <map>
    <entry key="testBean">
     <ref bean="testBean"/>
    </entry>
   </map>
  </property>
</bean>
<!--用它来指定一个工作应以怎样的频率运行,及第一次运行工作前应等多久-->
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <property name="jobDetail">
   <ref bean="reportJob"/>
  </property>
  <property name="startDelay">
   <value>3600000</value>
  </property>
  <property name="repeatInterval">
   <value>86400000</value>
  </property>
</bean>
<!--
CronTriggerBean允许更精确的控制任务的运行时间。如果要在每天的6:00运行任务可以按照以下方式声明一个CronTriggerBean
0 0 6 * * ?
jobDetail属性告诉触发器调度哪一个工作,属性cronExpression告诉触发器何时触发。一个cron表达式至少有6个由空格分隔的时间元素(最多7个)从左到右元素定义如下
   1。秒(0-59)
   2。分(0-59)
   3。小时(0-23)
   4。月份中的日期(1-31)
   5。月份(1-12 或 JAN-DEC)
   6。星期(1-7 或 SUN-SAT)
   7。年份(1970-2099)
  每一个元素都可以显示规定的一个值,一个区间(9-14),一个列表(9,12,14)或一个通配符(*)月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段
对于cronReportTrigger我们设置的cronExpression为 0 0 6 * * ?可以读作任意月份任何日期的6时0分0秒执行触发器
-->
<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail">
   <ref bean="reportJob"/>
  </property>
  <property name="cronExpression">
   <value>0/5 * * * * ?</value>
  </property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref bean="cronReportTrigger"/>
   </list>
  </property>
</bean>
</beans> 
第三步 相关类的编写 
EmailReportTask2.java
public class EmailReportTask2 extends QuartzJobBean {
     Log log = LogFactory.getLog(EmailReportTask.class);

     public EmailReportTask2() {
     }
//这个函数是调度任务执行的入口
     protected void executeInternal(JobExecutionContext jobExecutionContext) throws org.quartz.JobExecutionException {

         log.debug("task 2 begin :" + testBean.greeting);
     }


     private TestBean testBean;//这里实现spring的依赖注入

     public void setTestBean(TestBean testBean) {
         this.testBean = testBean;
     }
}
TestBean.java 同上
分享到:
评论

相关推荐

    Spring中定时任务

    本文将深入探讨Spring中的定时任务,并结合Eclipse和Maven项目环境进行讲解。 首先,Spring提供了两种主要的定时任务实现:`Spring Task`(也称为Spring自己的任务调度器)和`Quartz Scheduler`。`Spring Task`相对...

    spring-boot集成实例mybatis,mail,mysql,mongodb,cassandra,schedul.zip

    这个Spring Boot集成实例提供了全面的技术覆盖,不仅包括数据库的集成使用,还包括邮件服务、任务调度等常用功能的实现方法。这对于希望深入理解Spring Boot及其与其他技术栈集成的开发者而言,是一个非常有价值的...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    Spring+3.x企业应用开发实战光盘源码(全)

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:对...

    spring quartz通过xml配置实现定时任务demo

    本示例将详细讲解如何通过XML配置文件来实现Spring与Quartz的集成,从而构建一个定时任务Demo。 首先,Quartz是开源的作业调度框架,允许应用程序在预定义的时间执行特定的任务。Spring框架则提供了强大的依赖注入...

    精通spring--源代码

    线程池和任务调度集成。Java消息服务集成,Java Mail集成,远程服务集成。Java管理扩展集成,Java EE连接器架构集成  专注于Spring2.5高级特性的研究。包括忘却的Spring高级话题,Spring最佳实践  对Spring2.5内置...

    spring cloud尚硅谷 百度云.rar

    此外,教程可能还会涉及Spring Cloud Data Flow(数据流处理)、Spring Cloud Stream(消息驱动的微服务间通信)以及Spring Cloud Task(一次性任务调度)等内容。 学习“Spring Cloud尚硅谷”教程,开发者不仅能...

    spring+mvc+quartz.rar

    本教程将详细讲解如何利用Spring 4.3.15、Spring MVC 4.3.15和Quartz 2.2,构建一个可管理的定时任务系统,包括任务的暂停、启动、立即执行和重新调度等功能。 一、Spring MVC与Quartz简介 1. Spring MVC:是...

    在spring boot中使用java线程池ExecutorService的讲解

    3. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。 4. 任务队列(taskQueue):用于存放没有处理的任务。提供一种...

    Struts+Spring+Hibernate实例

    本实例将详细讲解如何使用这三个框架来构建一个完整的Web应用程序。 **Struts框架**: Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要负责处理用户请求和控制应用程序流程。它通过Action类...

    Spring计时器的功能用例

    - 在多实例环境下,如果需要全局唯一的定时任务,需要考虑分布式锁或使用分布式调度解决方案,如Quartz或Apache Ignite。 通过以上讲解,我们了解了Spring计时器的基本用法、核心组件以及一些实际应用场景。掌握这...

    精通Spring(书签)

    线程池和任务调度集成。Java消息服务集成,Java Mail集成,远程服务集成。Java管理扩展集成,Java EE连接器架构集成  专注于Spring2.5高级特性的研究。包括忘却的Spring高级话题,Spring最佳实践  对Spring2.5内置...

    spring和quartz整合,并简单调用(实例讲解)

    以上就是 Spring 和 Quartz 整合并简单调用的实例讲解。在实际项目中,你可以根据需求配置不同的触发器(如 CronTrigger 或 SimpleTrigger),以及定义多个 Job 和 Task 来执行不同的定时任务。通过这种方式,Spring...

    spring + hibernate + freemarker项目实例

    5. 创建服务(Service):定义业务接口和服务实现,利用Spring的依赖注入获取Hibernate的Session,实现数据操作。 6. 创建控制器(Controller):创建Spring MVC的Controller类,处理HTTP请求,调用Service层的方法...

    后端开发-基于Java的分布式调度后端实现.zip

    本资源“后端开发-基于Java的分布式调度后端实现.zip”着重讲解了如何利用Java技术栈来设计和实现一个分布式调度系统。下面我们将深入探讨相关知识点。 一、Java后端开发基础 Java作为一款广泛使用的编程语言,因其...

    Spring Timers

    本教程将聚焦于"Spring Timers",讲解如何使用Spring来实现定时任务,这对于初学者掌握后台定时任务的处理至关重要。 首先,Spring 提供了两种主要的方式来执行定时任务:Spring的TaskExecutor接口和Spring ...

    Pro Spring 3(带目录版)

    第15章:讲解了Spring中的任务调度,如何在Spring框架中安排和执行周期性的任务。 第16章:讲述了Spring远程调用的技术,包括Hessian、Burlap和RMI等技术的集成。 第17章:介绍了使用Spring进行Web应用程序开发,...

    pro_spring_3.pdf (英文原版非扫描 看到小便知)

    第15章:讨论了Spring中的任务调度。 第16章:介绍了Spring远程调用技术。 第17章:讲解了使用Spring进行Web应用程序开发。 第18章:探讨了Spring Web Flow和JSF。 第19章:讲述了Spring的测试策略。 第20章:...

    spring 2.0中文参考手册

    手册中还会详细讲解Spring的安全、测试、邮件服务等模块,帮助开发者全方位理解和掌握Spring 2.0框架。通过阅读《Spring 2.0中文参考手册》,开发者不仅可以学习到Spring的基本用法,还能了解到如何将Spring应用于...

    [Pro.Spring.3(2012)].Clarence.Ho.文字版

    本书全面覆盖了Spring框架的核心概念、应用开发、配置管理、AOP、数据访问、事务处理、任务调度、远程调用、Web应用、脚本支持、监控、测试以及与Spring相关的项目集成等多个方面。以下是对本书关键章节的详细解读:...

Global site tag (gtag.js) - Google Analytics