文档章节

Spring定时器简单运用

刘梓航
 刘梓航
发布于 2014/10/27 14:29
字数 915
阅读 49
收藏 4

转自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>




本文转载自:http://blog.csdn.net/qiulongtianshi/article/details/8977259

上一篇: H5本地存储一
下一篇: ajax学习笔记之二
刘梓航
粉丝 12
博文 57
码字总数 11448
作品 0
天津
程序员
私信 提问
[spring-framework] 定时器配置和使用(补充篇)

前面已经介绍过spring中定时器的配置和使用了,但楼主在使用spring 4.2.0包时才发现,原来新版的spring中对定时器的配置和老版本的配置略有不同。 spring 3.8.0定时器配置详见: spring-fram...

LSantorini
2015/11/22
131
0
SPRING 定时器应用,使用定时器发送邮件

Spring 的强大又体现出来了,相较于 JDK 定时器来说 SPRING 定时器可以做的更多更好,使用起来也相对复杂,今天就为大家带来一个简易版的定时器,并且使用他实现定时邮件发送功能。 具体详细...

香吉士
2014/06/12
890
10
求各位大神指点下,JAVA接口真正起到价值的使用

例如平时我们使用spring mvc +mybatis开发WEB项目,里面写的SERVICE方法,都是一个接口一个实现类的,不过实际上来看,接口这样起到的价值顶多就是把实现隔离而已,价值还真不算大。 换个想...

猫神
2016/11/14
624
5
Spring Boot整合MyBatis学习总结

公司的很多项目都陆陆续续引入了Spring Boot,通过对Spring Boot的接触了解发现其真的是大大地简化了开发、简化了依赖配置,很多功能注解一下就可以实现,真的是太方便了。下面记录了一个Spr...

zhuwensheng
2018/06/29
0
0
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题

关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题 问题描述 工作中用到了spring与quatz来实现定时器触发一些计划任务,原本都写在一个配置文件里。后来将...

Tek_Eternal
2015/02/20
549
0

没有更多内容

加载失败,请刷新页面

加载更多

线程池总结

1、主要参数说明 corepoolsize核心线程数、maxpoolsize最大线程数、keepalivetime闲置线程收回时间设置、workQueue工作队列(synchronizeQueue、LinkedBlockingQueue、ArrayListBlockingQueu...

青菜番茄h
2分钟前
2
0
Linux 下防火墙开启端口

1. 查看系统防火墙状态(running 表示开启运行状态) firewall-cmd --state 开启防火墙:systemctl start firewalld.service 关闭防火墙:systemctl stop firewalld.service 2. 开启端口外网访...

newdengs
5分钟前
2
0
一文看懂 K8s 日志系统设计和实践

上一篇中我们介绍了为什么需要一个日志系统、为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps、SRE、运维等同学看了是深有体会的。本篇文章单刀直入,会直接跟...

阿里巴巴云原生
6分钟前
1
0
2019上海会议还有哪些召开,11月及12月的互联网技术类等大会?

2019年还剩下40多天的时候,上海有还有哪些会议召开呢?让我们跟随活动家官网的展示,看看今年还剩下哪些会议可以去参加! 上海2019年11月至12月会议列表清单 技术/互联网/通信/区块链 类 20...

活动家峰会
8分钟前
1
0
2019最新数据分析软件PASS&NVIVO视频教程合集

还在为数据繁杂而困扰吗? 还在为不知道怎么提炼有价值的数据而焦躁吗? 别担心,解决的办法来了!本文就为大家介绍两款数据分析的实用软件。当然介绍软件的同时,更有两款软件最全的视频教程...

yuyuyuyo
9分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部