首页 > 代码库 > Spring定时器简单运用

Spring定时器简单运用

转自Spring定时任务        

Spring定时任务的功能很强大,上次简单应用一下,给大家分享下,希望大家多多交流!

这是一个定时打印时间控制台,这是一个简单定时任务!

请看程序的运行原码:

首先新建一个类:TellingTheTimeJob这个类是继承于Spring重写executeInternal这个方法。

package jobs;  
  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.springframework.scheduling.quartz.QuartzJobBean;  
import service.ITellingTheTimeService;  
  
  
/** 
 * @ProjectName:报时Demo    
 * @ClassName:TellingTheTimeJob    
 * @Description:    
 * @author:Sheep 
 * @date:2012-4-19 下午03:58:11    
 * @Modifier:  
 * @Modify Date:   
 * @Modify Note:    
 * @version 
 */  
public class TellingTheTimeJob extends QuartzJobBean {  
      
    private ITellingTheTimeService tellingTheTimeService = null;  
  
    @Override  
    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {  
        //调用报时方法  
        this.tellingTheTimeService.tellingTheTime();  
    }  
  
    public ITellingTheTimeService getTellingTheTimeService() {  
        return tellingTheTimeService;  
    }  
  
    public void setTellingTheTimeService(  
            ITellingTheTimeService tellingTheTimeService) {  
        this.tellingTheTimeService = tellingTheTimeService;  
    }  
}  
建立一个接口ITellingTheTimeService,功能为了实现定时调用
[java] view plaincopy
package service;  
  
  
/** 
 * @ProjectName:报时Demo  
 * @ClassName:ITellingTheTimeService    
 * @Description:    
 * @author:Sheep 
 * @date:2012-4-19 下午03:59:37    
 * @Modifier:  
 * @Modify Date:   
 * @Modify Note:    
 * @version 
 */  
public interface ITellingTheTimeService {  
      
    /** 
     * @Title: tellingTheTime  
     * @Description: 报当前时间       
     * @throws 
     */  
    void tellingTheTime();  
}

建立一个接口ITellingTheTimeService,功能为了实现定时调用

package service;  
  
  
/** 
 * @ProjectName:报时Demo  
 * @ClassName:ITellingTheTimeService    
 * @Description:    
 * @author:Sheep 
 * @date:2012-4-19 下午03:59:37    
 * @Modifier:  
 * @Modify Date:   
 * @Modify Note:    
 * @version 
 */  
public interface ITellingTheTimeService {  
      
    /** 
     * @Title: tellingTheTime  
     * @Description: 报当前时间       
     * @throws 
     */  
    void tellingTheTime();  
}

实现类

package service.impl;  
  
import java.text.SimpleDateFormat;  
import java.util.Calendar;  
import java.util.Date;  
  
import service.ITellingTheTimeService;  
  
  
/** 
 * @ProjectName:报时Demo 
 * @ClassName:TellingTheTimeServiceImpl    
 * @Description:    
 * @author:Sheep 
 * @date:2012-4-19 下午03:59:06    
 * @Modifier:  
 * @Modify Date:   
 * @Modify Note:    
 * @version 
 */  
public class TellingTheTimeServiceImpl implements ITellingTheTimeService {  
  
    /**@Description: 报时 
     * @see service.ITellingTheTimeService#tellingTheTime() 
     */  
    public void tellingTheTime() {  
        // TODO Auto-generated method stub  
        Calendar now = Calendar.getInstance();  
        System.out.println("现在是北京时间:"+this.format(now.getTime()));  
    }  
  
    public String format(Date date) {  
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        return format.format(date);  
    }  
}

applicationContext 配置文件

<?xml version="1.0" encoding="UTF-8"?>  
  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  
    <bean id="tellingTheTimeService" class="service.impl.TellingTheTimeServiceImpl"/>  
      
    <!-- 配置一个Job -->  
    <bean id="tellTheTimeJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="http://www.mamicode.com/jobs.TellingTheTimeJob"/>  
        <property name="jobDataAsMap">  
            <map>  
                <entry key="tellingTheTimeService" value-ref="tellingTheTimeService"></entry>  
            </map>  
        </property>  
    </bean>  
      
    <!-- 简单的触发器 -->  
    <bean id="simpleTellTheTimeTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
        <property name="jobDetail">  
            <ref bean="tellTheTimeJob" />  
        </property>  
        <!-- 以毫秒为单位,启动后一分钟触发 -->  
        <property name="startDelay">  
            <value>60000</value>  
        </property>  
        <!-- 每间隔一分钟触发一次 -->  
        <property name="repeatInterval">  
            <value>60000</value>  
        </property>  
    </bean>  
  
    <!-- 复杂的触发器 -->  
    <bean id="complexTellTheTimeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail">  
            <ref bean="tellTheTimeJob"/>  
        </property>  
        <property name="cronExpression">  
            <!-- 这里是重点,可以自定义表达式实现定时触发。以下含义是每分钟触发一次 -->  
            <value>0 0/1 * * * ?</value>  
        </property>  
    </bean>  
      
    <!-- Spring触发工厂 -->  
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="complexTellTheTimeTrigger"/>  
                <!-- ....下面可以继续添加其他触发器 -->  
            </list>  
        </property>  
    </bean>  
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"   
    xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
      
  <!-- 配置Spring XML上下文路径 -->  
  <context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext*.xml</param-value>  
  </context-param>    
    
    
  <listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  </listener>  
    
</web-app>

这样就可以实现spring定时任务了,所引用的jar是:commons-collections.jar,commons-logging- 1.0.4.jar,log4j-1.2.15.jar,quartz-1.6.1-RC1.jar和spring.jar(2.5) 。


总结

主要步骤:

第一步:新建类并集成QuartzJobBean并重写executeInternal方法()

第二步:配置applicationContent.xml文件

(1)<!-- 配置一个Job -->  
    <bean id="tellTheTimeJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass" value="http://www.mamicode.com/jobs.TellingTheTimeJob"/>  
        <property name="jobDataAsMap">  
            <map>  
                <entry key="tellingTheTimeService" value-ref="tellingTheTimeService"></entry>  
            </map>  
        </property>  
    </bean>  
(2) <!-- 复杂的触发器 -->  
    <bean id="complexTellTheTimeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail">  
            <ref bean="tellTheTimeJob"/>  
        </property>  
        <property name="cronExpression">  
            <!-- 这里是重点,可以自定义表达式实现定时触发。以下含义是每分钟触发一次 -->  
            <value>0 0/1 * * * ?</value>  
        </property>  
    </bean>  
(3)<!-- Spring触发工厂 -->  
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="complexTellTheTimeTrigger"/>  
                <!-- ....下面可以继续添加其他触发器 -->  
            </list>  
        </property>  
    </bean>

第三步:在xml中配置spring上下文

 <!-- 配置Spring XML上下文路径 -->  
  <context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext*.xml</param-value>  
  </context-param>    
    
    
  <listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  </listener>




Spring定时器简单运用