Spring Task原理及使用

Spring Task用于处理定时任务,提供了TaskExecutor和TaskScheduler接口。TaskExecutor基于Executor接口,而TaskScheduler支持定时任务,利用cron表达式进行调度。在Spring 4.x中,cron表达式要求6个参数,例如{秒} {分} {时} {日期} {月} {星期}。配置方式包括XML配合注解或纯注解方式,启用注解配置需在任务类上添加@EnableScheduling注解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:
https://blog.youkuaiyun.com/u011116672/article/details/52517247
https://blog.youkuaiyun.com/lucky_ly/article/details/78726307

Spring Task的作用是处理定时任务。Spring中为定时任务提供TaskExecutor,TaskScheduler两个接口。

TaskExecutor继承了jdk的Executor:

public interface TaskExecutor extends Executor {
    void execute(Runnable var1);
}

这意味着他就是一个execute。

TaskScheduler提供定时器支持,即定时滴执行任务:

scheduler.schedule(task, new CronTrigger("30 * * * * ?"));

通过上面的方法,传入一个Rannable任务,Trigger触发器,就可以定时滴执行任务了,具体应用了cron表达式。

在spring 4.x中已经不支持7个参数的cronin表达式了,要求必须是6个参数(具体哪个参数后面会说)。cron表达式的格式如下:

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

在这里插入图片描述

通常而言,可以使用xml配合注解开发,以及注解开发两种。
具体做法为:
1.引入pom文件

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>

2.添加定时执行的任务

<context:component-scan base-package="com.springTask"/>

    <task:scheduled-tasks>   
        <task:scheduled ref="taskTest" method="execute" cron="0/1 * * * * ?"/>   
    </task:scheduled-tasks> 

第二种方式,主要基于注解

package com.springTask;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.config.TaskExecutorFactoryBean;
import org.springframework.stereotype.Component;

@Component
public class TaskTest {

    @Scheduled(cron="* * * * * ?")
    public void execute(){
        System.out.println("let's go on " + new SimpleDateFormat().format(new Date()).toString());
    }


}

xml配置文件:

    <task:annotation-driven/>
    <context:component-scan base-package="com.zx.jeeTomatoSyS.*"/>
     <task:scheduler id="scheduler" pool-size="100"/>

第三种方式,基于注解:

任务类上 @EnableScheduling 即可。

xml配置文件:

    <task:annotation-driven/>
    <context:component-scan base-package="com.zx.jeeTomatoSyS.*"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值