spring schedule定时任务

来源:互联网 发布:阿里云客服待遇怎么算 编辑:程序博客网 时间:2024/06/04 23:31

1      springschedule定时任务

1.1     前提

spring项目已正常跑通;

1.2     spring配置文件修改

xmlns增加:

xmlns:task=http://www.springframework.org/schema/task

xsi:schemaLocation增加:

http://www.springframework.org/schema/task  

      http://www.springframework.org/schema/task/spring-task-3.2.xsd

 

注解扫描增加定时任务类所在的包名(红字部分):

<tx:annotation-driven/>

       <context:annotation-config/>

<context:component-scanbase-package="com.cmcc.cxb.sec.omss.dal,com.cmcc.cxb.sec.omss.service,com.cmcc.cxb.sec.omss.security,com.cmcc.cxb.sec.omss.schedule"/>

 

增加定时任务扫描:

       <!--Enables the Spring Task @Scheduled programming model --> 

   <task:executor id="executor" pool-size="5"/> 

   <task:scheduler id="scheduler" pool-size="10"/> 

<task:annotation-drivenexecutor="executor" scheduler="scheduler" /> 

1.3     定时任务类

定时任务接口:

public interfaceUpdateOperatingData {

       public void updateOperatingData();

}

定时任务实现类:

@Service

public classJyUpdateOperatingDataImpl implements UpdateOperatingData{

       @Override

       @Scheduled(cron = "0 2/10 * * * ?")  //每10分钟在02分更新一次

       public void updateOperatingData(){

              log.debug("<----------------schedule-updateOperatingDatastart------------>");

              //定时操作

              log.debug("<----------------schedule-updateOperatingDataend------------>");

       }

}

1.4     注意事项

1.        定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true);

2.        spring的@Scheduled注解需要写在方法实现上;

3.        实现类上要有注解;

1.5     corn表达式

@Scheduled(cron = "* * * * * ?")

1.5.1  特殊字符表示

Ø  星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;

Ø  问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;

Ø  减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;

Ø  逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;

Ø  斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;

1.1      Quartz Cron 表达式支持到七个域

 

名称

是否必须

允许值

特殊字符

0-59

, - * /

0-59

, - * /

0-23

, - * /

1-31

, - * ? / L W C

1-12 或 JAN-DEC

, - * /

1-7 或 SUN-SAT

, - * ? / L C #

空 或 1970-2099

, - * /

月份和星期的名称是不区分大小写的。FRI 和 fri 是一样的

域之间有空格分隔

 

1.5.2  分钟的 Cron 表达式

表 5.1. 包括了分钟频度的任务计划 Cron 表达式

用法

表达式

每天的从 5:00 PM 至 5:59 PM 中的每分钟触发

0 * 17 * * ?

每天的从 11:00 PM 至 11:55 PM 中的每五分钟触发

0 0/5 23 * * ?

每天的从 3:00 至 3:55 PM 和 6:00 PM 至 6:55 PM 之中的每五分钟触发

0 0/5 15,18 * * ?

每天的从 5:00 AM 至 5:05 AM 中的每分钟触发

0 0-5 5 * * ?

1.5.3  日上的 Cron 表达式

表 5.2. 基于日的频度上任务计划的 Cron 表达式

用法

表达式

每天的 3:00 AM

0 0 3 * * ?

每天的 3:00 AM (另一种写法)

0 0 3 ? * *

每天的 12:00 PM (中午)

0 0 12 * * ?

在 2005 中每天的 10:15 AM

0 15 10 * * ? 2005

1.5.4  周和月的 Cron 表达式

表 5.3. 基于周和/或月的频度上任务计划的 Cron 表达式

用法

表达式

在每个周一,二, 三和周四的 10:15 AM

0 15 10 ? * MON-FRI

每月15号的 10:15 AM

0 15 10 15 * ?

每月最后一天的 10:15 AM

0 15 10 L * ?

每月最后一个周五的 10:15 AM

0 15 10 ? * 6L

在 2002, 2003, 2004, 和 2005 年中的每月最后一个周五的 10:15 AM

0 15 10 ? * 6L 2002-2005

每月第三个周五的 10:15 AM

0 15 10 ? * 6#3

每月从第一天算起每五天的 12:00 PM (中午)

0 0 12 1/5 * ?

每一个 11 月 11 号的 11:11 AM

0 11 11 11 11 ?

三月份每个周三的 2:10 PM 和 2:44 PM

0 10,44 14 ? 3 WED

 

1 0
原创粉丝点击