文档章节

spring4.2 定时任务

l
 lopinhjings
发布于 2016/02/03 16:27
字数 1028
阅读 48
收藏 1
点赞 2
评论 0

一.实现定时任务的方式主要有三种 
  1.通过JDK自带的类实现,即:java.util.Timer结合java.util.TimerTask,使用这种方式可以让你的程序按照某一个频度执行,但调度控制非常不方便,需要大量代码,不推荐 
  2.使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,推荐 
  3.Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 获取【下载地址】   

二.实现代码 

第一种,java自带的 
  定时任务执行类 

Java代码  

  1. import java.util.TimerTask;  

  2.   

  3. public class TestTask extends TimerTask{  

  4.   

  5.     @Override  

  6.     public void run() {  

  7.         System.out.println("定时任务测试");  

  8.     }  

  9.   

  10. }  


调用定时任务类 

Java代码  

  1. import java.util.Date;  

  2. import java.util.Timer;  

  3.   

  4. import javax.servlet.ServletContextEvent;  

  5. import javax.servlet.ServletContextListener;  

  6.   

  7. import org.springframework.web.context.ContextLoaderListener;  

  8.   

  9. public class TimerContext extends ContextLoaderListener implements ServletContextListener{  

  10.   

  11.     @Override  

  12.     public void contextDestroyed(ServletContextEvent arg0) {  

  13.         // TODO Auto-generated method stub  

  14.           

  15.     }  

  16.   

  17.     @Override  

  18.     public void contextInitialized(ServletContextEvent arg0) {  

  19.         Timer timer = new Timer();  

  20.         timer.scheduleAtFixedRate(new TestTask(), new Date(), 2000);  

  21.     }  

  22.   

  23. }  



如果spring框架,可以继承ContextLoaderListener类,在实现ServletContextListener,然后把web.xml文件配置ContextLoaderListener改为: 

Java代码  

  1. <listener>  

  2.     <listener-class>com.hebradio.wechat.task.TimerContext</listener-class>  

  3. </listener>  


如果直接用servlet,那就直接实现ServletContextListener,再在web.xml文件配置上面的监听器 

第二种,使用Quartz 

第一步:.配置job,有两种方式 
(1).继承org.springframework.scheduling.quartz.QuartzJobBean 

Java代码  

  1. package com.test.task;  

  2.   

  3. import org.quartz.JobExecutionContext;  

  4. import org.quartz.JobExecutionException;  

  5. import org.springframework.scheduling.quartz.QuartzJobBean;  

  6.   

  7. public class TestTask extends QuartzJobBean{  

  8.   

  9.     @Override  

  10.     protected void executeInternal(JobExecutionContext arg0)  

  11.             throws JobExecutionException {  

  12.         System.out.println("定时任务测试");  

  13.           

  14.     }  

  15.   

  16. }  


   配置文件中配置作业类 
   spring4.2没有JobDetailBean,改为:JobDetailFactoryBean 

Java代码  

  1. <bean id="jobDetailFactory"  

  2.      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">  

  3.      <property name="jobClass" value="com.test.task.TestTask" />    

  4.      <!--  

  5.      <property name="jobDataMap">  

  6.          <map>    

  7.              <entry key="timeout" value="5" />  

  8.          </map>  

  9.      </property>  -->  

  10.  </bean>  



(2).使用MethodInvokingJobDetailFactoryBean,此时类不用继承任何接口或者类,方法名称可以随便定义 

Java代码  

  1. public class TestTask{  

  2.   

  3.     public void test(){  

  4.         System.out.println("定时任务测试");  

  5.     }  

  6.   

  7. }  


Java代码  

  1. <bean id="jobDetailFactory"  

  2. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">   

  3.        <!-- 这个就是具体实现类,如果是注解,则必须为component指定value -->  

  4.        <property name="targetObject">  

  5.         <bean class="com.test.task.TestTask"/>  

  6.        </property>  

  7.        <!-- targetMethod是Spring定时器的特殊属性 -->  

  8.        <property name="targetMethod" value="test" />  

  9.        <!-- false表示job不会并发执行,默认为true -->  

  10.        <property name="concurrent" value="false" />  

  11.    </bean>  



第二步:配置调度任务执行的触发的时间,两种方式 
   (1) 使用SimpleTriggerFactoryBean 

Java代码  

  1. <bean id="simpleTrigger"   

  2.     class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">    

  3.     <property name="jobDetail" ref="jobDetailFactory" />    

  4.     <!-- 第一次执行时间多少毫秒之后  -->  

  5.     <property name="startDelay" value="1000" />    

  6.     <!-- 每过多少毫秒执行一次定时任务  -->  

  7.     <property name="repeatInterval" value="5000" />    

  8. </bean>  


   (2) 使用CronTriggerFactoryBean 

Java代码  

  1. <bean id="cronTrigger"    

  2.         class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">    

  3.         <property name="jobDetail" ref="jobDetailFactory" />  

  4.        <!-- 每天早上六点执行一次   

  5.         <property name="cronExpression" value="0 0 6 * * ?" /> -->   

  6.        <!--每分执行一次  

  7.         <property name="cronExpression" value="0 0/1 * * * ?" /> -->  

  8.        <!--每5秒执行一次-->  

  9.         <property name="cronExpression" value="0/5 * * * * ?" />   

  10.     </bean>  


  第三步:配置Quartz的调度工厂,调度工厂只能有一个,多个调度任务在list中添加 

Java代码  

  1. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">    

  2.     <property name="triggers">    

  3.         <list>    

  4.             <!-- <ref bean="cronTrigger" /> -->  

  5.             <ref bean="simpleTrigger" />  

  6.         </list>    

  7.     </property>    

  8. </bean>   


第三种,spring自带的 
这种方式在一台电脑上配置成功,但是将代码拷贝到另外两台电脑后,定时任务不执行了,没有找到原因,后来改为上面第二种,如果有知晓的朋友,请告知一下,谢谢 
在spring配置文件头引入下面两行 

Java代码  

  1. xmlns:task="http://www.springframework.org/schema/task"  


Java代码  

  1. xsi:schemaLocation="...  

  2. http://www.springframework.org/schema/task  

  3. http://www.springframework.org/schema/task/spring-task-4.2.xsd"  



定时任务配置 
<!-- 定时任务执行 driven--> 

Java代码  

  1. <task:annotation-driven/>  



Java代码  

  1. <context:annotation-config/>  



<!-- 定时任务所在包 --> 

Java代码  

  1. <context:component-scan base-package="com.test.task"/>  



Java代码  

  1. package com.test.task;  

  2.   

  3. import org.springframework.scheduling.annotation.Scheduled;  

  4. import org.springframework.stereotype.Component;  

  5.   

  6. @Component("testTask")  

  7. public class TestTask{  

  8.       

  9.     @Scheduled(cron="0/5 * * * * ?")//每5秒钟执行一次  

  10.     public void testCron(){  

  11.         System.out.println("定时任务测试");  

  12.     }  

  13.       

  14.     @Scheduled(fixedRate=5000, initialDelay=1000)//第一次服务器启动一秒后执行,以后每过5秒执行一次,具体情况请查看Scheduled的方法  

  15.     public void test() {  

  16.         System.out.println("定时任务测试");  

  17.     }  

  18.   

  19. }  



记得在类上面加@Component,在方法上加@Scheduled 
Scheduled的表达式有两种,即代码中,一种即可,用这种方式,定时任务与定时任务之间是顺序执行的,并没有为每一个定时任务分一个线程

© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 3
码字总数 8948
作品 0
合肥
Fastjson、Jackson与SpringMVC整合的MessageConverter配置

1.Jackson maven依赖 springmvc-servlet.xml中配置 2.FastJson 由于FastJson针对Spring4.2以后进行特殊优化,具体如图 所以FastJson可以分为Spring4.2及以下配置和Spring4.2以上的不同配置 ...

楠木楠 ⋅ 2016/11/30 ⋅ 0

Spring4+SpringMVC+Hibernate4整合,你可能会遇到的问题

1、java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.LocalSessionFactoryBean 缺少spring-orm jar包,如下: <dependency> <groupId>org.springframework</groupId> ......

阿阿阿阿阿局 ⋅ 2016/08/16 ⋅ 0

Jspxcms 7.0.0 发布,国内开源 Java CMS

Jspxcms-7.0.0-release今天正式发布。 新功能(New Feature) 文档录入增加doc导入功能,可以导入doc里面的图片,避免一张张上传。 增加找回密码邮件的有效期,超过8小时失效。 增加角色等级,...

jspxcms ⋅ 2016/12/27 ⋅ 35

Spring测试框架springContextTest

ssh版本:spring4.2/struts2.3/hibernate4;除了一些必要的jar包外,使用spring自带的测试框架,还要额外导入spring-test-4.2.2.jar。 junit使用的是junit4.7,相关测试代码如下: package ...

liuhuics10 ⋅ 2015/12/09 ⋅ 0

springmvc multipart/form-data controller不能获取表单的值

该配置的都配置了但是还是不能获取表单的值 去掉multipart/form-data controller可以获取 jar包已经导入了 我用的是ssm (spring4.2) maven springMVC.xml...

sami110 ⋅ 2016/09/19 ⋅ 4

Spring4.2新特性(一)

已经发在了并发编程网: http://ifeve.com/spring4-2/ 1. 简介. 前些天spring4.2出来了, 从GA开始就一直在跟了, 前2天看完了所有Release Notes, 觉得记录下我比较感兴趣的特性. 官方的Release...

德胜 ⋅ 2015/08/17 ⋅ 3

Jspxcms 6.5.0 发布,国内开源 java cms

Jspxcms-6.5.0-release今天正式发布。 更新列表: jspxcms-6.5.0-release (2016-07-07) 新功能(New Feature) 1. 开源版开放多站点功能。 2. 增加手机端网站演示。 3. 增加微信公众号群发新闻...

jspxcms ⋅ 2016/07/07 ⋅ 20

定时任务发展史(二)

第一代定时任务系统上线用了大概半年之后,就被我们厌倦了。于是就规划了第二代定时任务系统。 第二代定时任务系统 第二代调度系统主要解决的是,避免每次修改定时任务的执行时间都需要重新启...

ityouknow ⋅ 2017/07/07 ⋅ 0

基于PHP的定时任务管理器--Zebra-Crontab

为什么使用PHP管理crontab 一般在定时任务较少的情况下,使用原生的crontab服务一般不会有什么问题,但当定时任务较多时就会产生如下问题: 文本形式的定时任务可读性很差,在没有任何注释的...

呼延平 ⋅ 2015/01/18 ⋅ 1

Java Web定时任务这一篇就够了

一、Java定时任务 1、Timer 包下面一个工具类,从1.3开始便支持了; 说明下后两个参数分别是delay延迟执行,和period执行间隔,单位都是毫秒。 2、ScheduledExecutorService 包下面,从1.5开...

叫我宫城大人 ⋅ 04/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部