文档章节

spring 定时器

黑帽子
 黑帽子
发布于 2013/07/01 16:10
字数 846
阅读 698
收藏 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 Boot整合MyBatis学习总结

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

zhuwensheng
06/29
0
0
SpringMVC框架使用注解执行定时任务

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

Carl_
2015/07/23
0
0
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题

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

Tek_Eternal
2015/02/20
0
0
SPRING 定时器应用,使用定时器发送邮件

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

香吉士
2014/06/12
0
10

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
35
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部