文档章节

spring 定时器

黑帽子
 黑帽子
发布于 2013/07/01 16:10
字数 846
阅读 699
收藏 4

Java代码   收藏代码  

  1. 第一种 Java Timer定时  



spring配置文件:
<bean id= "reportTimerTask" class ="com.flex.thread.TaskJob"></ bean>(或者在TaskJob类中添加注释:)
<bean id= "scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask" >
            <property name="timerTask" ref="reportTimerTask" />
           <!-- 设置启动延迟 -->
          <property name="delay" >
          <value> 10000</value >
           </property>
         <!-- 后续延迟 -->
             <property name="period" >
             <value> 6000</value >
             </property>
</bean>
      
<bean class="org.springframework.scheduling.timer.TimerFactoryBean" > 
               <property name="scheduledTimerTasks" >    
               <list>< ref bean ="scheduleReportTask"/></ list>
               </property>
</bean>

class类  
 
package com.flex.thread;

import java.util.TimerTask;
public class TaskJob extends TimerTask {

       @Override
       public void run() {

         ...
     }  
}


Java代码   收藏代码  

  1. 第二种 Quartz定时器  



Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz:
首先我们来写一个被调度的类:
package com.web.quartz;

public class TaskReportJob {

       protected void work() {
            System. out.println("------定时器运行中------" );
      }

}
Spring的配置文件:
<beans>
<!-- 要调用的工作类 -->
<bean id= "quartzJob" class ="com.web.quartz.TaskReportJob" ></bean>
<!-- 定义调用对象和调用对象的方法 -- >
<bean id= "jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
    <!-- 调用的类 -->
    <property name = "targetObject" >
        <ref bean ="quartzJob" />
    </property>
    <!-- 调用类中的方法 -- >
    <property name = "targetMethod" >
        <value>work</value >
    </property>
</bean>
<!-- 定义触发时间 -- >
<bean id= "doTime" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
    <property name = "jobDetail" >
        <ref bean ="jobtask" />
    </property>
    <!-- cron 表达式 -- >
    <property name = "cronExpression" >
        <value> 10,15,20,25,30,35,40,45,50,55 * * * * ? </value >
    </property>
</bean>
<!-- 总管理类 如果将lazy- init= 'false' 那么容器启动就会执行调度程序  -- >
<bean id= "startQuertz" lazy-init = "false" autowire = "no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
    <property name = "triggers" >
        <list>
            <ref bean ="doTime" />
        </list>
    </property>
</bean>
</beans>



第三种  

定义一个类继承org.springframework.scheduling.quartz.QuartzJobBean;

Java代码   收藏代码  

  1. import java.util.ArrayList;  

  2. import java.util.HashMap;  

  3. import java.util.Iterator;  

  4. import java.util.List;  

  5. import java.util.Map;  

  6.   

  7. import org.apache.commons.logging.Log;  

  8.   

  9. import org.apache.commons.logging.LogFactory;  

  10. import org.quartz.JobExecutionContext;  

  11. import org.quartz.JobExecutionException;  

  12. import org.springframework.jdbc.core.JdbcTemplate;  

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

  14.   

  15. import com.zdvictory.approve.business.dao.AppBusiBasicDAO;  

  16.   

  17. public class UpdateWorkflowJob extends QuartzJobBean{  

  18.     private JdbcTemplate jdbcTemplate ;  

  19.     private AppBusiBasicDAO appBusiBasicDAO ;  

  20.       

  21.         private Log log = LogFactory.getLog(UpdateWorkflowJob.class);  

  22.     @Override  

  23.     protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException {  

  24.         System.out.println("执行过程");  

  25.     }  

  26.       

  27.     public AppBusiBasicDAO getAppBusiBasicDAO() {  

  28.         return appBusiBasicDAO;  

  29.     }  

  30.   

  31.     public void setAppBusiBasicDAO(AppBusiBasicDAO appBusiBasicDAO) {  

  32.         this.appBusiBasicDAO = appBusiBasicDAO;  

  33.     }  

  34.   

  35.     public JdbcTemplate getJdbcTemplate() {  

  36.         return jdbcTemplate;  

  37.     }  

  38.   

  39.     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  

  40.         this.jdbcTemplate = jdbcTemplate;  

  41.     }  

  42. }  



2、定义配置文件

Java代码   收藏代码  

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  

  3. <beans>     

  4.     <bean id="updateWorkflowJob"  

  5.         class="org.springframework.scheduling.quartz.JobDetailBean">  

  6.         <property name="jobClass">  

  7.             <value>  

  8.                 com.zdvictory.workflow.timer.UpdateWorkflowJob  

  9.             </value>  

  10.         </property>  

  11.         <property name="jobDataAsMap">  

  12.             <map>  

  13.                 <entry key="jdbcTemplate">  

  14.                     <ref bean="jdbcTemplate_sjjh"/>  

  15.                 </entry>  

  16.                 <entry key="appBusiBasicDAO">  

  17.                     <ref bean="appBusiBasicDAO"/>  

  18.                 </entry>  

  19.             </map>  

  20.         </property>  

  21.     </bean>  

  22.       

  23.     <bean id="updateWorkflowJobTrigger"  

  24.         class="org.springframework.scheduling.quartz.CronTriggerBean">  

  25.         <property name="jobDetail">  

  26.             <ref bean="updateWorkflowJob" />  

  27.         </property>  

  28.         <property name="cronExpression">  

  29.         <!-- 每分钟执行一次 -->  

  30.             <value>0 0/1 8-23 * * ?</value> 8-23:早上8点至晚上23点正常执行  

  31.         </property>  

  32.     </bean>  

  33.     <!-- 启动定时器 -->  

  34.     <bean id="start" lazy-init="false"  

  35.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  

  36.         <property name="triggers">  

  37.             <list>  

  38.                 <ref bean="updateWorkflowJobTrigger" />  

  39.             </list>  

  40.         </property>  

  41.     </bean>  

  42. </beans> 


Java代码   收藏代码  

  1. 表达式意义   



"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

© 著作权归作者所有

共有 人打赏支持
黑帽子
粉丝 17
博文 53
码字总数 25680
作品 0
珠海
高级程序员
私信 提问
[spring-framework] 定时器配置和使用(补充篇)

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

LSantorini
2015/11/22
0
0
用Spring定时器写了个程序,查询数据库固定次数后,内存溢出

该程序是用Spring定时器执行的,定时用hibernate框架查询数据库,将查询到的结果写成文本文件。 启动定时器之后每次在生成了52个文本文件之后,就内存溢出了。 由于代码不多我直接贴代码和错...

颜可
2014/07/23
4.3K
4
Spring 定时器每月最后一天语法报错

在SPring定时器 中想在每月最后一天23:50进行一个定时器,但是网上找到 的语法貌似有问题: 运行我的web程序报如下错误: 请问这个语法真的不支持 吗?我是用的是Spring 3...

码上中国博客
2017/03/06
880
3
关于Spring Quartz......

可以动态修改执行时间的Spring Quartz定时器,怎么设置tomcat启动时不执行定时器,或者cronExpression 怎么设置成任何时间都不执行,动态修改触发时间的时候再执行定时器?怎么样结束定时器?...

ian003
2014/04/23
303
5
SpringMVC框架使用注解执行定时任务

在项目开发过程中,免不了会有一些定时任务。今天就给大家一个SpringMVC框架中利用注解的方式执行定时任务的示例代码 使用到的JAR文件: 点击下列Jar文件会跳到我的网盘下载 aopalliance-1....

Carl_
2015/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
29
3
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
20
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
25
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
29
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部