前言
有关 Spring 框架使用 @Scheduled 注解实现定时任务调度的文章很多,但是大都不许转载,那我想,写吧。
配置
- 更改命名空间
在 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
- 配置扫描包
在 Spring 的配置文件中,Spring 的扫描位置一定要包含你创建的定时任务类
<context:component-scan base-package="com.liu">
- 设置定时任务
在 Spring 的配置文件中,设置定时任务
<task:annotation-driven scheduler="scheduler"/>
<task:scheduler id="scheduler" pool-size="10"/> <!--设置调度线程池的大小,防止多定时任务出现问题-->
- 编写定时任务对象
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class TimerTask {
@Scheduled(cron = "* * * * * ?")//每秒执行
public void test(){
System.out.println("定时任务");
}
}
-
CRON 表达式含义
简单介绍下CRON 表达式 ,一个 CRON 表达式有至少6个(也可能7个)有空格分隔的时间元素。 按顺序依次为 :- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 天(月)(0~31,但是你需要考虑你月的天数) 天(月)(0~31,但是你需要考虑你月的天数)
- 月(0~11) 月(0~11)
- 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
- 年份(1970-2099)年份(1970-2099)
字符含义:
*
字符代表所有可能的值
因此,*
在子表达式(月)里表示每个月的含义,*
在子表达式(天(星期))表示星期的每一天/
字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样?
字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为?
L
字符仅被用于天(月)和天(星期)两个子表达式
它是单词“last”的缩写 它是单词“last”的缩写 ,但是它在两个子表达式里的含义是不同的。
在天(月)子表达式中,L
表示一个月的最后一天LAST DAY
在天(星期)自表达式中,L
表示一个星期的最后一天LAST DAY
,也就是SAT
(星期天)
结语
这段时间做项目,我觉得特别有意义的一件事是,之前觉得一些知识、技术太新了,离自己很遥远,但是在写项目的过程中,发现这些新知识新技术是可以很以实际的方式影响到开发。举个例子,就是这个定时任务,用 Spring 框架实现特别方便,因为之前写定时任务机器很繁琐。以及 JDK 每个版本添加的新特性,本来以为稳定的开发应该用不到这些新知识,但是我仍然使用高版本JDK,结果都陆陆续续用到了,真的是令人惊喜。
最近发生各种各样的事情,生活、工作、亲人,加上我自己心情没调整好,因此没怎么写博文。我深切的感觉到长期稳定的做一件事情是有多难,但我还是会告诉自己,活在当下,不管怎么样,我还是去做吧,至于结果好坏、完成与否,且去,勿想。