博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Spring Task轻松完成定时任务
阅读量:7122 次
发布时间:2019-06-28

本文共 3330 字,大约阅读时间需要 11 分钟。

一、背景 

  最近项目中需要使用到定时任务进行库存占用释放的需求,就总结了如何使用Spring Task进行简单配置完成该需求,本文介绍Spring3.0以后自定义开发的定时任务工具,

spring task,我们可以将它比作一个轻量级的Quartz,使用简单方便,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式,下面我会分别介绍这两种方式。

二、定时任务开发步骤

  开发环境

    Spring 4.2.6.RELEASE

    Maven 3.3.9

    Jdk 1.7

    Idea 15.04

  【1】.基于配置文件

    1.编写普通java class

package com.hafiz.www.cron;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Desc:第一个基于SpringTask的调度任务 * Created by hafiz.zhang on 2016/12/11. */public class FirstCron {    private static final Logger logger = LoggerFactory.getLogger(FirstCron.class);    public void cron() {        logger.info("定时任务进行中.......");        // do something else    }}

    2.在spring配置文件头中添加命名空间及描述(下面加粗处)并配置定时任务

1 
7 8
9
10
11
12

我们设置每5秒钟运行一次。关于Spring Task 的 cron表达式,请参见另一篇博客:

  【2】基于注解

    我们可以使用@Scheduled注解进行开发,首先我们看下,该注解的源码

1 package org.springframework.scheduling.annotation; 2  3 import java.lang.annotation.Documented; 4 import java.lang.annotation.ElementType; 5 import java.lang.annotation.Repeatable; 6 import java.lang.annotation.Retention; 7 import java.lang.annotation.RetentionPolicy; 8 import java.lang.annotation.Target; 9 import org.springframework.scheduling.annotation.Schedules;10 11 @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})12 @Retention(RetentionPolicy.RUNTIME)13 @Documented14 @Repeatable(Schedules.class)15 public @interface Scheduled {16     String cron() default "";17 18     String zone() default "";19 20     long fixedDelay() default -1L;21 22     String fixedDelayString() default "";23 24     long fixedRate() default -1L;25 26     String fixedRateString() default "";27 28     long initialDelay() default -1L;29 30     String initialDelayString() default "";31 }

可以看出该注解有五个方法或者叫参数,分别表示的意思是:

cron:指定cron表达式

zone:官方文档解释:A time zone for which the cron expression will be resolved。指定cron表达式运行的时区

fixedDelay:官方文档解释:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。

fixedRate:官方文档解释:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即从上一个任务开始到下一个任务开始的间隔,单位是毫秒。

initialDelay:官方文档解释:Number of milliseconds to delay before the first execution of a fixedRate() or fixedDelay() task.任务第一次被调用前的延时,单位毫秒

      1.编写注解的定时任务类

1 package com.hafiz.www.cron; 2  3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 import org.springframework.scheduling.annotation.Scheduled; 6  7 /** 8  * Desc:第一个基于SpringTask的调度任务 9  * Created by hafiz.zhang on 2016/12/11.10  */11 public class FirstCron {12     private static final Logger logger = LoggerFactory.getLogger(FirstCron.class);13 14     @Scheduled(cron = "0/5 * * * * ?")15     public void cron() {16         logger.info("定时任务进行中.......");17         // do something else18     }19 }

    2.在spring配置文件头中添加命名空间及描述(下面加粗处)并开启定时任务注解驱动

1 
7 8
9
10
11
12

 以上我们就完成了基于注解的定时任务的开发,是不是很简单?

运行结果:

  

三、总结

  其实有些知识我们表面上看起来很难,但是当我们实际操作的时候,发现挺简单的,只要遇到问题我们勤思考多思考,就一定会有解决办法。关于定时任务,还有一种基于Spring Quartz的实现,以后有需要,我们再进行介绍。欢迎留言交流.......

 

转载于:https://www.cnblogs.com/gscq073240/articles/7830238.html

你可能感兴趣的文章
linux下DNS的配置
查看>>
Android中带分割线的九宫格
查看>>
修改progressbar的样式
查看>>
Python3.x和Python2.x的区别
查看>>
原子变量类Atomic详解(java.util.Concurrent)
查看>>
Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
查看>>
常见的分布式文件系统介绍
查看>>
日期相关的格式设置
查看>>
通过Spring-boot整合dubbo框架
查看>>
C程序三子棋
查看>>
不知道SQL SERVER账户密码,生成创建用户的语句
查看>>
php 缩略图生成类,支持imagemagick及gd库两种处理
查看>>
我的友情链接
查看>>
11. 哈希表(1)
查看>>
node js 打包文件
查看>>
div的offsetLeft与style.left区别
查看>>
LAMP介绍与基本安装
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
linux 查看进程占用内存
查看>>