zoukankan      html  css  js  c++  java
  • Spring 定时器的使用

    spring定时器应用

    相关类: 

        org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean 配置定时远行方法

        org.springframework.scheduling.quartz.CronTriggerBean 配置定时调度时间

        org.springframework.scheduling.quartz.SchedulerFactoryBean 调度总控

    MyEclipse自动生成项目,导入spring3.1 默认jar包,自动配置spring插件,然后开始实现功能

    1、继承TimerTask的实现类实现定时器功能,默认选用run方法执行,

     其中TimerTask 可以不用实现,配置文件实现实现的方法即可
    package com.test.spring.task;
    
    import java.util.Date;
    import java.util.TimerTask;
    
    public class TestSpringTask extends TimerTask  { 
        
        public TestSpringTask() {
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub  定时任务代码
            System.out.println("定时任务开始,时间:"+ new Date());
        }  
    
    }

    2、配置applicationContext.xml文件

    <?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:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <!-- 定时器实现类 -->
    <bean id="TestSpringTask" class="com.test.spring.task.TestSpringTask"></bean>
    <!-- 执行方法 -->
    <bean id="testScheduledTimerTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="TestSpringTask" />
        </property>
        <property name="targetMethod">
            <value>run</value><!-- 配置 默认执行方法-->
        </property>
    </bean>
    <!--  调度触发器 -->
    <bean id="testScheduledTimerTaskDoTim" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="testScheduledTimerTask" />
        </property>
        <property name="cronExpression">
            <value>0 */1 * * * ?</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="testScheduledTimerTaskDoTim"/> 
                    </list> 
                </property> 
            </bean> 
    
    </beans>

    其中问题

      异常1、.NoClassDefFoundError: org/quartz/spi/Job

        自动导入spring jar 包 缺少quartz的jar 包(与Spring3.1以下版本整合必须使用Quartz1)

      2、NoClassDefFoundError: org/springframework/transaction/TransactionException  

        自动导入spring jar 包 缺少spring.transaction-3.0.5.RELEASE.jar 的jar 包

      3、NoClassDefFoundError: org/slf4j/LoggerFactory

        缺少缺少slf4j-api-1.5.2,slf4j-log4j12-1.5.2,log4j-1.2.8这几个包,导入即可

    定时器时间配置说明:

      

    说明:

             1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

                   字段名                 允许的值                        允许的特殊字符  

                   秒                         0-59                               , - * /  

                   分                         0-59                               , - * /  

                   小时                   0-23                               , - * /  

                   日                         1-31                               , - * ? / L W C  

                   月                         1-12 or JAN-DEC          , - * /  

                   周几                     1-7 or SUN-SAT            , - * ? / L C #  

                   年 (可选字段)     empty, 1970-2099      , - * /

                   “?”字符:表示不确定的值

                   “,”字符:指定数个值

                   “-”字符:指定一个值的范围

                   “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

                   “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

                   “W”字符:指定离给定日期最近的工作日(周一到周五)

                   “#”字符:表示该月第几个周X。6#3表示该月第3个周五

             2)Cron表达式范例:

                     每隔5秒执行一次:*/5 * * * * ?

                     每隔1分钟执行一次:0 */1 * * * ?

                     每天23点执行一次:0 0 23 * * ?

                     每天凌晨1点执行一次:0 0 1 * * ?

                     每月1号凌晨1点执行一次:0 0 1 1 * ?

                     每月最后一天23点执行一次:0 0 23 L * ?

                     每周星期天凌晨1点实行一次:0 0 1 ? * L

                     在26分、29分、33分执行一次:0 26,29,33 * * * ?

                     每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

    "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触发

    每天早上6点

    0 6 * * *

    每两个小时

    0 */2 * * *

    晚上11点到早上8点之间每两个小时,早上八点

    0 23-7/2,8 * * *

    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

    0 11 4 * 1-3

    1月1日早上4点

    0 4 1 1 *

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/huxdiy/p/5259928.html
Copyright © 2011-2022 走看看