Spring Task定时任务

Spring框架自带的异步执行(TaskExecutor)和任务调度(TaskScheduler)接口。

task任务调度配置:spring-tasks.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="     
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd   
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd   
        default-lazy-init=">    
 
         <context:annotation-config></context:annotation-config>  
        <!--  spring扫描注解的配置   -->  
        <context:component-scan base-package="com.levi.test.task"></context:component-scan>
               
       <!--开启这个配置,spring才能识别@Scheduled注解   -->  
       <task:annotation-driven mode="proxy" scheduler="testScheduler"></task:annotation-driven>  
       <task:scheduler id="testScheduler" pool-size="10"></task:scheduler>  
 
</beans>

任务调度实现代码:TestTask.java

package com.levi.test.task;
 
import java.text.SimpleDateFormat;;
import java.util.Calendar;
import java.util.Date;
 
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
@Component("TestTask")
public class TestTask {
     
    //每天凌晨4:40执行
    @Scheduled(cron = "0 40 4 * * ?")
    public void TestTask() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    Date factInPlaceDate = new Date();
 
        Calendar beforeCd = Calendar.getInstance();  
    beforeCd.setTime(factInPlaceDate);  
    beforeCd.add(Calendar.MONTH, -1);  
    Date beforeFactDate = beforeCd.getTime(); 
    String beforeMonthDate = sdf.format(beforeFactDate);
    System.out.println("实际到位日期减一个月:" + beforeMonthDate);
         
    Calendar afterCd = Calendar.getInstance();  
    afterCd.setTime(factInPlaceDate);  
    afterCd.add(Calendar.MONTH, +1);  
    Date afterFactDate = afterCd.getTime(); 
    String afterMonthDate = sdf.format(afterFactDate);
    System.out.println("实际到位日期加一个月:" + afterMonthDate);
   }  
}
在spring 4.x中已经不支持7个参数的cronin表达式了,要求必须是6个参数。cron表达式的格式如下:

{秒} {分} {时} {日期(具体哪天)} {月} {星期}
  • 秒:必填项,允许的值范围是0-59,支持的特殊符号包括
     
    
    ,
    - * / , , 表示特定的某一秒才会触发任务, - 表示一段时间内会触发任务, * 表示每一秒都会触发, / 表示从哪一个时刻开始,每隔多长时间触发一次任务。
  • 分:必填项,允许的值范围是0-59,支持的特殊符号和秒一样,含义类推
  • 时:必填项,允许的值范围是0-23,支持的特殊符号和秒一样,含义类推
  • 日期:必填项,允许的值范围是1-31,支持的特殊符号相比秒多了 ? ,表示与{星期}互斥,即意味着若明确指定{星期}触发,则表示{日期}无意义,以免引起冲突和混乱。
  • 月:必填项,允许的值范围是1-12(JAN-DEC),支持的特殊符号与秒一样,含义类推
  • 星期:必填项,允许值范围是1~7 (SUN-SAT),1代表星期天(一星期的第一天),以此类推,7代表星期六,支持的符号相比秒多了 ? ,表达的含义是与{日期}互斥,即意味着若明确指定{日期}触发,则表示{星期}无意义。

比如下面这个cron表达式:

// 表达的含义是:每半分钟触发一次任务
30 * * * * ?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值