zoukankan      html  css  js  c++  java
  • Spring——使用 @Scheduled 注解实现定时任务

    前言

    有关 Spring 框架使用 @Scheduled 注解实现定时任务调度的文章很多,但是大都不许转载,那我想,写吧。

    配置

    1. 更改命名空间
      在 Spring 的配置文件,中进行配置,我的是 spring.xml,更改命名空间,添加 xmlns 及 xsi 在 Spring 的配置文件,中进行配置,我的是 spring.xml,更改命名空间,添加 xmlns 及 xsi 在 Spring 的配置文件,中进行配置,我的是 spring.xml,更改命名空间,添加 xmlns 及 xsi 在 Spring 的配置文件,中进行配置,我的是 spring.xml,更改命名空间,添加 xmlns 及 xsi
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:task="http://www.springframework.org/schema/task" 				<!-- 添加 xmlns
           xsi:schemaLocation="http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    		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-4.3.xsd
    		http://www.springframework.org/schema/aop
    		http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    		http://www.springframework.org/schema/tx 
    		http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
            http://www.springframework.org/schema/task							<!-- 添加 xsi -->
            http://www.springframework.org/schema/task/spring-task-3.2.xsd		<!-- 添加 xsi -->
    ">
    

    即添加:

    xmlns:task="http://www.springframework.org/schema/task" 
    
    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/task
    
    1. 配置扫描包
      在 Spring 的配置文件中,Spring 的扫描位置一定要包含你创建的定时任务类
    <context:component-scan base-package="com.liu">
    
    1. 设置定时任务
      在 Spring 的配置文件中,设置定时任务
    <task:annotation-driven scheduler="scheduler"/>
    <task:scheduler id="scheduler" pool-size="10"/> <!--设置调度线程池的大小,防止多定时任务出现问题-->
    
    1. 编写定时任务对象
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    @Component
    public class TimerTask {
        @Scheduled(cron = "* * * * * ?")//每秒执行
        public void test(){
            System.out.println("定时任务");
        }
    }
    
    1. CRON 表达式含义
      简单介绍下CRON 表达式 ,一个 CRON 表达式有至少6个(也可能7个)有空格分隔的时间元素。 按顺序依次为 :

      1. 秒(0~59)
      2. 分钟(0~59)
      3. 小时(0~23)
      4. 天(月)(0~31,但是你需要考虑你月的天数) 天(月)(0~31,但是你需要考虑你月的天数)
      5. 月(0~11) 月(0~11)
      6. 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
      7. 年份(1970-2099)年份(1970-2099)

      字符含义:

      1. *字符代表所有可能的值
        因此,*在子表达式(月)里表示每个月的含义,*在子表达式(天(星期))表示星期的每一天
      2. /字符用来指定数值的增量
        例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
        在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
      3. ?字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
        当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为?
      4. L 字符仅被用于天(月)和天(星期)两个子表达式
        它是单词“last”的缩写 它是单词“last”的缩写 ,但是它在两个子表达式里的含义是不同的。
        在天(月)子表达式中,L 表示一个月的最后一天 LAST DAY
        在天(星期)自表达式中,L 表示一个星期的最后一天 LAST DAY,也就是SAT(星期天)

    结语

    这段时间做项目,我觉得特别有意义的一件事是,之前觉得一些知识、技术太新了,离自己很遥远,但是在写项目的过程中,发现这些新知识新技术是可以很以实际的方式影响到开发。举个例子,就是这个定时任务,用 Spring 框架实现特别方便,因为之前写定时任务机器很繁琐。以及 JDK 每个版本添加的新特性,本来以为稳定的开发应该用不到这些新知识,但是我仍然使用高版本JDK,结果都陆陆续续用到了,真的是令人惊喜。
    最近发生各种各样的事情,生活、工作、亲人,加上我自己心情没调整好,因此没怎么写博文。我深切的感觉到长期稳定的做一件事情是有多难,但我还是会告诉自己,活在当下,不管怎么样,我还是去做吧,至于结果好坏、完成与否,且去,勿想。

  • 相关阅读:
    网络基础 | 等长子网划分概述
    python学习笔记(六)——异常处理
    python模块 | 随机数模块—random模块
    python模块 | 时间处理模块—datetime模块
    python学习笔记(五)——模块导入
    思科计算机网络 | 第一章路由器概念测试题(一)
    kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)
    单例模式 | C++ | Singleton模式
    思科网络学习笔记 | 路由概念
    python学习笔记(五)——静态方法、类方法、运算符重载
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925951.html
Copyright © 2011-2022 走看看