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,结果都陆陆续续用到了,真的是令人惊喜。
最近发生各种各样的事情,生活、工作、亲人,加上我自己心情没调整好,因此没怎么写博文。我深切的感觉到长期稳定的做一件事情是有多难,但我还是会告诉自己,活在当下,不管怎么样,我还是去做吧,至于结果好坏、完成与否,且去,勿想。

原文地址:https://www.cnblogs.com/Sherlock-J/p/12925951.html