定时任务调度之Spring-Task

 之前一直使用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 等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,283评论 19 139
  • Quartz是一个完全由java编写的功能丰富的开源作业调度库,可以集成到几乎任何Java应用程序中,小到独立应用...
    ProteanBear阅读 12,002评论 3 24
  • 博客原文 徒手翻译spring framework 4.2.3官方文档的第33章,若有翻译不当之处请指正。 定时任...
    rabbitGYK阅读 11,023评论 4 24
  • 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的...
    低至一折起阅读 3,671评论 0 3
  • 此时,三点半。 已烧了水,煮了饭个,通过写零秒思考,把自己沮丧的心情调整过来。 我和时间做朋友,我要在这美好的早晨...
    躲进小楼看灯火阅读 1,706评论 0 0

友情链接更多精彩内容