定时任务调度之Spring-Task

2018-03-23  本文已影响0人  跳动的字符

 之前一直使用Quartz定时调度框架,感觉其配置起来太繁锁,近期决定采用Spring-Task作为任务调度框架,因为其配置简单,灵活,易维护的特点。具体使用步骤如下:
在之前的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 Tom.Liao
 * @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 Tom.Liao
 * @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"));
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读