zoukankan      html  css  js  c++  java
  • Spring任务调度之Timer

    原文地址:http://www.cnblogs.com/hongwz/p/5642320.html

    一、分类

    • 由于现在大部分的系统都是采用了spring,所以所有的例子都结合spring来构建,目前主要的任务调度分为三种:
    1. Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。
    2. 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
    3. Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

    二、Java自带的java.util.Timer类

       1.构建线程类

    public class MyTask {
        private String name;
         
        public void run() {
            System.out.println("Run task: " + name + ".");
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
    }

    2.创建spring的配置文件,spring.xml,内容如下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
           default-lazy-init="true">
     
        <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean" lazy-init="false">
            <property name="scheduledTimerTasks">
                <list>
                    <ref local="scheduledTask1"/>
                </list>
            </property>
        </bean>
     
        <bean id="scheduledTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask">
            <property name="delay" value="0" />
            <property name="period" value="10000" />
            <property name="timerTask">
                <ref bean="methodInvokingTask1"/>
            </property>
        </bean>
         
        <bean id="methodInvokingTask1" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
            <property name="targetObject" ref="myTask1"/>
            <property name="targetMethod" value="run"/>
        </bean>
     
        <bean id="myTask1" class="org.garbagecan.springstudy.schedule.timer.MyTask">
            <property name="name" value="task1"/>
        </bean>
    </beans>

    三、调度说明

         1. 定义了一个tasktask1
         2. 利用spring提供的MethodInvokingTimerTaskFactoryBean类来实现来实现对对task类和方法的声明,声明目标对象和方法,从而使spring知道要运行那个类的那个方法。
         3. 利用ScheduledTimerTask类来配置每个task的启动时间延时,每次启动之间的间隔,当然还有最重要的是需要运行那个对象,这里使用的上面提到的MethodInvokingTimerTaskFactoryBean类           的实例。

        4. 最后定义了一个TimerFactoryBean类,并且把ScheduledTimerTask类的实例作为需要调度task

    四、测试类

    package org.garbagecan.springstudy.schedule.timer;
     
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    public class Test {
        public static void main(String[] args) throws Exception {
            new ClassPathXmlApplicationContext("/org/garbagecan/springstudy/schedule/timer/spring.xml");
        }
    }

    运行Test类,可以看到task启动,并且使用每10秒作为每次运行之间的时间   

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/dyh004/p/9288769.html
Copyright © 2011-2022 走看看