Spring Task

Spring Task 是 Spring 框架提供的轻量级任务调度工具,支持定时任务和异步任务。以下是其核心用法:


一、基础配置

1. 启用定时任务

在配置类中添加 @EnableScheduling 注解,启用定时任务功能:

@Configuration
@EnableScheduling
public class AppConfig {}

二、定时任务

1. 创建任务类

使用 @Component 标记类,并在方法上添加 @Scheduled 注解:

@Component
public class MyTask {

    // 每5秒执行一次(固定频率)
    @Scheduled(fixedRate = 5000)
    public void task1() {
        System.out.println("Fixed Rate Task: " + new Date());
    }

    // 上一次任务结束后,延迟3秒执行(固定延迟)
    @Scheduled(fixedDelay = 3000)
    public void task2() {
        System.out.println("Fixed Delay Task: " + new Date());
    }

    // 使用Cron表达式(每天12点执行)
    @Scheduled(cron = "0 0 12 * * ?")
    public void task3() {
        System.out.println("Cron Task: " + new Date());
    }
}
2. 参数说明
  • fixedRate:固定频率,单位毫秒。无论上一次任务是否完成,按固定间隔执行。
  • fixedDelay:固定延迟,单位毫秒。上一次任务完成后,间隔指定时间再执行。
  • cron:Cron表达式,支持复杂调度(如 0 0/30 * * * ? 表示每30分钟执行)。

三、Cron表达式语法

格式:秒 分 时 日 月 周 年(可选)

  • 示例:
    • 0 0 12 * * ?:每天中午12点执行。
    • 0 0/5 9-17 * * MON-FRI:工作日上午9点到下午5点,每5分钟执行。

四、异步任务

结合 @Async 实现异步执行,需配合线程池:

  1. 启用异步支持:
    @Configuration
    @EnableAsync
    public class AsyncConfig {}
    
  2. 定义异步任务:
    @Component
    public class AsyncTask {
        @Async
        @Scheduled(fixedRate = 5000)
        public void asyncTask() {
            // 异步执行的逻辑
        }
    }
    

五、XML配置方式(旧版)

applicationContext.xml 中配置:

<!-- 启用调度 -->
<task:annotation-driven />

<!-- 定义任务 -->
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="myTask" method="task1" cron="0 0 12 * * ?" />
</task:scheduled-tasks>

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

六、线程池配置

默认单线程执行任务,可通过实现 SchedulingConfigurer 自定义线程池:

@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
    }
}

注意事项

  1. 线程安全:确保任务方法是线程安全的。
  2. 错误处理:任务内应捕获异常,避免任务终止。
  3. 动态任务:需通过 ScheduledTaskRegistrar 动态注册任务。

通过以上步骤,即可灵活使用 Spring Task 实现定时和异步任务调度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值