美文网首页
定时任务调度之Spring-Task

定时任务调度之Spring-Task

作者: 跳动的字符 | 来源:发表于2018-03-23 17:45 被阅读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 等。

    相关文章

      网友评论

          本文标题:定时任务调度之Spring-Task

          本文链接:https://www.haomeiwen.com/subject/trmxcftx.html