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="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="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>
时间: 2024-10-09 13:13:35

Spring定时器简单运用的相关文章

[工作必备]spring定时器简单的demo

原文:[工作必备]spring定时器简单的demo 源代码下载地址:http://www.zuidaima.com/share/1586950010391552.htm 本月的最后一天上班季.给大家分享一个工作中经常用到的一个算得上是技术吧.我在网上找了好多方法,都是简单的描述,并没有案例.今天抽时间做出来了一个简单的demo.希望可以帮助大家. 如图,我在这里配置的定时器是每10秒执行一次. 其实很简单,重点是在配置applicationContext.xml里面的cronExpression

一个简单的Spring定时器例子 注解方式

首先在applicationContext.xml中增加 文件头中增加一条 xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation 中增加一条 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd <beans xmlns:task=&quo

[spring-framework]Spring定时器的配置和使用

开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了msgRequest方法,用于执行定时任务 --> <bean id="msg_request" class="com.santorini.task.timer.MessageRequestTask"></bean> <!-- 定时器配

Spring定时器的配置和使用

开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了msgRequest方法,用于执行定时任务 --> <bean id="msg_request" class="com.santorini.task.timer.MessageRequestTask"></bean> <!-- 定时器配

Spring定时器的配置

Spring定时器的配置(注解+xml)方式 (2013-09-30 10:39:18)转载▼ 标签: spring定时器配置 spring定时器注解方式 spring定时器xml方式 spring配置 分类: Spring Spring 配置定时器(注解+xml)方式—整理 一.注解方式 1. 在Spring的配置文件ApplicationContext.xml,首先添加命名空间 xmlns:task="http://www.springframework.org/schema/task&qu

spring3定时器简单配置

最近在做oa项目中写到一个功能,就是员工每天的签到和签退.当时想了很久都没有想出来,后来自己上网查了一下spring的定时器,然后就有了思路. 下面我贴上自己用到的这个定时器的配置.希望能够和大家一起学习. 1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:task="http://www.springframework.org/schema/task" 3 http://

spring定时器设置(转自:http://my.oschina.net/LvSantorini/blog/520049)

转自:http://my.oschina.net/LvSantorini/blog/520049<!-- MessageRequestTask类中包含了msgRequest方法,用于执行定时任务 --> <bean id="msg_request" class="com.santorini.task.timer.MessageRequestTask"></bean> <!-- 定时器配置 --> <bean id

spring定时器任务多任务串行执行问题排查

原文:https://www.cnblogs.com/youtianhong/p/6027249.html 最近发现个生产问题,定时器任务某些任务没有及时执行.经过研究排查发现spring 定时器任务scheduled-tasks默认配置是单线程串行执行的,这就造成了若某个任务执行时间过长,其他任务一直在排队,业务逻辑没有及时处理的问题. 如下是scheduled定义了3个任务. <task:scheduled-tasks > <task:scheduled ref="myTa

spring定时器

本人小菜鸟一枚,今天在公司看到一段spring定时器配置,自己总结一下! <!-- 定义调用对象和调用对象的方法 --><bean id="jobtask9" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 调用的类 --><property name="targetObject"&