但行好事
莫论前程❤

定时任务调度–Spring-Task

 最近来学习一下定时任务调度.谷歌了一番,都说Spring-Task要比quartz简单一些,那就先从它下手啦.其配置简单,灵活,易维护的特点。具体使用步骤如下: 在之前的spring.xml文件中增加配置项,在<beans>中增加如下配置项:

<beans 
    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.0.xsd">

在beans节点里如下配置项:

<!-- 自动扫描包 -->
    <context:component-scan base-package="com.hp.*.timer" />

    <!-- 如采用注解方式,则需配置此项 -->
    <task:annotation-driven scheduler="myScheduler"/><!-- 启用注解驱动的定时任务 -->
    <task:scheduler id="myScheduler" pool-size="5"/><!-- 配置定时任务的线程池(多线程时配置此项))-->

    <!-- 配置定时任务时间(如采用注解方式,则无需配置此项) -->
    <task:scheduled-tasks>
        <task:scheduled ref="openAccJob" method="execute" cron="0 0/1 * * * ?"/>
    </task:scheduled-tasks>

说明:

  • 1、理论上只需加上<task:annotation-driven />就可以了,参数都不是必须的;
  • 2、ref指定的即任务类,method指定的即需要运行的方法,cron表达式与quartz一样。

定时任务调度类(配置形式),代码如下:

package com.hp.pay.timer;

/**
 * 查询服务
 * 
 * @author liupeng
 * @date 2018-03-20
 * @version 1.0.0
 */
@Service
public class OpenAccJob {

    private static final Logger log = Logger.getLogger(OpenAccJob.class);

    /**
     * 定时调度入口
     */
    public void execute() {
        log.info("openAcc query job startTime:" + DateUtils.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
        try {
            /// 此处代码省略
        } catch (Exception e) {
            log.error("查询时出错:" + e.getMessage(), e);
        }
        log.info("openAcc query job endTime:" + DateUtils.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
    }
}

定时任务调度类(注解形式),代码如下

package com.hp.pay.timer;

/**
 * 查询服务
 * 
 * @author liupeng
 * @date 2018-03-20
 * @version 1.0.0
 */
@Component(“openAccJob”)
public class OpenAccJob {

    private static final Logger log = Logger.getLogger(OpenAccJob.class);

    /**
     * 定时调度入口
     */
    @Scheduled(cron = "0 0/1 * * * ?")
    public void execute() {
        log.info("openAcc query job startTime:" + DateUtils.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
        try {
            /// 此处代码省略
        } catch (Exception e) {
            log.error("查询时出错:" + e.getMessage(), e);
        }
        log.info("openAcc query job endTime:" + DateUtils.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
    }
}

@Scheduled注解中,有一些属性,方便我们对调度方法进行控制。下面详细介绍下。
fixedRate
@Scheduled(fixedRate = 1000)
该属性表明某个方法,需要每隔指定的毫秒熟进行周期性调用。fixedRate = 1000 表示方法每隔1秒钟执行一次。
– fixedDelay
@Scheduled(fixedDelay = 1000)
该属性表明某个方法在上次调用完成与下一次调用开始之间的间隔。
cron 表达式
上面介绍的两种属性都是用于配置该方法的调用频率,但并不能准确按照指定时间执行。例如,我们需要方法天凌晨一点执行,这个时候就需要用到cron表达式。cron = 0 0 1 * * ? * 表示该方法每天凌晨1点钟调用一次。
cron表达式的详解用法,详情见cron表达式

但Spring-Task不支持分布式,分布式定时调度还得用 quartz,开源的分布式任务调度框架有:opencronLTSXXL-JOB 和 Elastic-Job 等。

赞(0) 打赏
未经允许不得转载:刘鹏博客 » 定时任务调度–Spring-Task
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏