zoukankan      html  css  js  c++  java
  • spring定时任务的几种实现方式

    转自:https://www.cnblogs.com/wcyBlog/p/4105165.html

    近日项目开发中需要执行一些定时任务,比如需要在每天早上9:00,准时发布信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合

    spring框架来介绍。

    一.分类

    • 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):

    1. Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。
    2. 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
    3. Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。
    • 从作业类的继承方式来讲,可以分为两类:

    1. 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
    2. 作业类即普通的java类,不需要继承自任何基类。

    注:个人推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。

    • 从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:
    1. 每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
    2. 每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean

    注:并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。

    二.用法

    1、Java自带的java.util.Timer类,自定义一个类继承TimerTask

    例子:

    package com.timertest;
     
    import java.util.Timer;
    import java.util.TimerTask;
     
    public class TestTimerTask {
         
        Timer timer;
         
        public TestTimerTask(int a) {
            timer = new Timer();
            timer.schedule(new GoodTimerTask(),01000*a);
        }
     
        public static void main(String[] args) {
            System.out.println("About to schedule task.");
            new TestTimerTask(3);
        }
         
        class GoodTimerTask extends TimerTask{
     
            @Override
            public void run() {
                System.out.println("Timer running!");
            }
             
        }
    }

     2、Spring3.0以后自带的task

    /一、在applicationContext.xml配置的方式
    //1、准备jar包
    //   (1)spring核心jar包
    //2、在项目中写个类
        @Service
        public class BookScheduleTask {
         
        @Resource
        private BookService bookService;
         
        public Page<Book> findAllBook(){ //不带参数
            System.out.println("BookScheduleTask.findAllBook()");
            return bookService.findBook(1);
        }
        }
    //3、在ApplicationContext.xml配置文件中写如下配置:
        <!-- 自动扫描 -->
        <context:component-scan base-package="com" />
         
        <!-- spring框架的Scheduled定时器 -->
        <task:scheduled-tasks>
            <task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/>
        </task:scheduled-tasks>
     
        说明:(1)<context:component-scan base-package="com" />该配置,相信大家用过spring的都知道是什么意思,
                 是spring用于扫描注解的
              (2)<task:scheduled-tasks>,该配置的作用是定义一个时间计划任务,定义某个类下面某个方法在某个时间执行。
                 <task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/>,ref表示的是
             某个要在规定时间执行的类,method表示要执行的类下的某个方法,cron表示时间表达式,具体详细的表达式
             可以百度查询。
     
     
    //二、基于注解的spring定时器
    //   1、同上,准备好spring的jar包
    //   2、在项目中创建一个类,用于执行定时任务的类。如下:
            @Component("bookScheduleTask")
        public class BookScheduleTask {
         
        @Resource
        private BookService bookService;
         
        @Scheduled(cron="0 50 14 * * ?")
        public void findAllBook(){
            System.out.println("BookScheduleTask.findAllBook()");
            bookService.findBook(1);
           }
        }
    //    说明:基于注解的方法,@Component("bookScheduleTask")表示定义了一个别名。
    //  @Scheduled(cron="0 50 14 * * ?")表示:该注解下的方法是一个时间任务,在cron="0 50 14 * * ?"(14:50)执行findAllBook()方法

     3、使用quartz,重量级框架,该方式详见

    http://gong1208.iteye.com/blog/1773177

  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/zhangyfr/p/9863850.html
Copyright © 2011-2022 走看看