java实现任务调度,SpringTask实现任务调度的两种方式

QuartZ 是一个成熟的调度组件,发展时间较长,所以在与 Spring 整合处理时需要进行大量的配置。

为了解决 QuartZ 配置复杂的问题,Spring 3.0  后的版本提供了一个新的定时任务工具—— SpringTask 组件。可以把它作为一个轻量级的 Quartz,使用起来简单方便,而且支持注解和配置文件两种形式。

1.基于配置文件实现SpringTask任务调度处理

要在配置文件中使用 SpringTask 组件,需要先在配置文件中使用 task 命名空间进行配置,如图 1 所示。

e33e93dd712211f81deccdf59cd7809d.png

图 1  在配置文件中引入 task 命名空间

配置完成后,在 spring-base.xml 配置文件中可发现如下命名空间信息。

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

1.【javaspring-base模块】建立一个专门的任务执行类,该类不需要做任何继承,只是一个纯粹的类。开发者可以自己定义一个任务的执行方法。

package com.javagreat.javaspring.task;

import java.text.SimpleDateFormat;

public class MyTask { // 任意定义一个方法名称

protected void runTask() {

System.out.println("【当前的日期时间】" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()));

}

}

2.【javaspring-base模块】修改 spring-base.xml 配置文件,追加任务配置。

采用间隔触发形式执行任务调用。

采用CRON定时触发形式执行任务调用。

本程序在配置 SpingTask 时,直接使用了 task 命名空间。在此命名空间中可直接配置任务执行类、任务处理方法与调度模式。

2.基于Annotation的SpringTask配置

SpringTask 实现的任务调度其优势不仅仅是配置简单,同样也可以结合 Context 配置实现 Annotation 注解定义,这样的开发可以减少配置文件的使用。

1.【javaspring-base模块】在 spring-base.xml 配置文件中定义 Context 路径。

2.【javaspring-base模块】修改任务处理类,任务处理类要直接设置调度安排的注解。

package com.javagreat.javaspring.task;

import java.text.SimpleDateFormat;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

@Component

public class MyTask {

@Scheduled(cron = "*****?") // 任务调度设置

public void runTask() { // 任意定义一个方法名称

System.out.println("【当前的日期时间】" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()));

}

}

本程序采用了注解的形式实现了 SpringTask 任务定义,同时在要执行的任务方法上使用了 @Scheduled 注解设置了任务的执行时间,该操作可以配置 CRON 定时调用,也可以使用 fixedDelay 实现间隔调用。

SpringTask任务调度池

实际开发中,有时需要多个定时任务同时执行。默认情况下,Spring 一般会使用单线程池来执行定时任务处理,这样就会出现一个问题:当某一个定时任务执行时间过长时,其他定时任务就不得不延期执行。

为了解决这个问题,可采用多线程池形式定义多个线程对象,实现多个定时任务的并行调用。

范例:【javaspring-base模块】修改 spring-base.xml 配置文件,追加线程池定义。

这里,程序定义了两个大小相同的线程池。当有两个定时任务执行时,将不会彼此影响,从而不会造成任务执行的延迟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值