• Spring注解实现定时功能以及Quartz定时器


    • Spring注解实现:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz。
    1. maven配置:
      <!--quartz-->
      <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz</artifactId>
          <version>2.2.1</version>
      </dependency>
      <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz-jobs</artifactId>
          <version>2.2.1</version>
      </dependency>
    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"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:task="http://www.springframework.org/schema/task"
           xsi:schemaLocation="   
               http://www.springframework.org/schema/beans   
               http://www.springframework.org/schema/beans/spring-beans.xsd   
               http://www.springframework.org/schema/context   
               http://www.springframework.org/schema/context/spring-context.xsd  
               http://www.springframework.org/schema/mvc   
               http://www.springframework.org/schema/mvc/spring-mvc.xsd
               http://www.springframework.org/schema/task 
               http://www.springframework.org/schema/task/spring-task.xsd ">
           <!--启用注解,加载定时任务-->
           <task:annotation-driven />
           <context:annotation-config />
           <!--定时任务扫描的包-->
           <context:component-scan base-package="*.*.*"/>
      </beans>
    3. 实现:
      import org.springframework.scheduling.annotation.Scheduled;
      import org.springframework.stereotype.Component;
      
      @Component
      public class TimeTest {
      
           @Scheduled(cron="*/3 * * * * ?")//每10秒跑一次任务
           public void tesTime(){
                System.out.println("定时器执行成功!---------66666----------");
           }
      }


    • 配置Quartz实现定时器功能:
      • 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"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="   
              http://www.springframework.org/schema/beans   
              http://www.springframework.org/schema/beans/spring-beans.xsd   
              http://www.springframework.org/schema/context   
              http://www.springframework.org/schema/context/spring-context.xsd  
              http://www.springframework.org/schema/mvc   
              http://www.springframework.org/schema/mvc/spring-mvc.xsd">
              
          <!--扫描包  -->    
          <context:component-scan base-package="com.*.*" />
    
          <!-- 要调用的工作类 -->
          <bean id="timeTestBean" class="com.*.*.TimeTest"></bean>
    
          <!-- 定义调用对象和调用对象的方法 -->
          <bean id="job" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
              <!-- 调用的类 -->
              <property name="targetObject" ref="timeTestBean"></property>
              <!-- 调用类中的方法 -->
              <property name="targetMethod" value="tesTime"></property>
          </bean>
    
          <!-- 定义触发时间 -->
          <bean id="time" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
              <property name="jobDetail" ref="job"></property>
              <!-- cron表达式 -->
              <property name="cronExpression">
                  <value>0/2 * * * * ?</value><!-- 每2秒执行一次 -->
              </property>
          </bean>
          
          <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
          <!-- lazy-init="false" autowire="no" -->
          <bean id="scheduler" 
              class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
              <property name="triggers">
                  <list>
                      <ref bean="time" />
                  </list>
              </property>
          </bean>
     </beans>


    • 时间配置:
    示例如下:
    0 0 12 * * ?---------------在每天中午12:00触发 
    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:00至2:59之间每分钟触发一次 
    0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次 
    0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次 
    0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次 
    0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和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, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发 
    0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发 
    0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发
  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/LJing21/p/10179928.html
Copyright © 2020-2023  润新知