导航

spring task定时任务

Posted on 2018-01-15 17:19  time,  阅读(389)  评论(0编辑  收藏  举报

感觉很久没写这个东西,项目太忙,人也变懒了很多,哈哈哈~近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候需要自动创建一些必要的数据到DB,借此机会也好好的GET了一下定时任务方面的知识,

一.TimerTask

Java本身有提供自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务,但是这种方式只能让程序按照某一频度执行,比如一分钟或者一个小时执行一次,并不是很实用

二.Quartz

Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作(这段是直接百度过来的),简单来讲就是Quartz是一个可配置时间段,也可按频度来执行指定的业务的调度器,但是需要配置的东西非常多.

三.Spring Task

可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,并且支持多种方式配置,因为这里使用了task所以也简单记录一下使用方法

第一种:配置文件方式

第一步:编写业务类

1 @Service  
2 public class TaskService {  
3       
4     public void job() {  
5         System.out.println(“定时任务启动。。。”);  
6     }  
7 }  

第二步:在spring配置文件头中添加命名空间及描述  

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:task="http://www.springframework.org/schema/task"   
    以下为需要引入的spring配置文件头  
    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">  

 第三步:spring配置文件中设置具体的任务

<task:scheduled-tasks>   
        <task:scheduled ref="任务类" method="需要执行的方法" cron="0 * * * * ?"/>   
</task:scheduled-tasks>  
  
<context:component-scan base-package="spring扫描注解使用 " />  

以上是通过配置文件的方式来使用springtask定时任务功能,配置来说比较简单,关于配置文件里面的cron属性为定时任务触发时间的表达式,可按年、月、日、时、分、秒配置触发时间。

第二种:使用注解形式

这里就不详细介绍注解的源码了,有兴趣的可以自己去看下官方源码,直接上使用方法

第一步:编写业务类

 1 @Component
 2 public class Schedule {
 3     
 4     /**
 5      * 工作日每天早上0、4、6点执行
 6      */
 7     @Scheduled(cron = "0 0 0,4,6 ? * MON-FRI")
 8     void createChildSign(){
 9         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEEE");
10         String format = sdf.format(new Date());
11         LOGGER.info("【执行任务{}】", format);
12         
13     }
14 }

 第二步:在Spring配置文件中添加task相关的配置(同配置文件一致,需要配置文件头中添加命名空间及描述 ):

    <context:annotation-config />  
    <!—spring扫描注解的配置   -->  
    <context:component-scan base-package="spring扫描注解使用" />  
      
  <!—开启这个配置,spring才能识别@Scheduled注解   -->  
    <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>  
    <task:scheduler id="qbScheduler" pool-size="10"/>  

理论上只需要加上<task:annotation-driven />这句配置就可以了,其他参数都不是必须的。

以上就是通过两种方式完成spring定时任务,简单来说就是配置文件少,效率高,使用简单,而且提供了可配置的cron属性,用于配置执行时间和频度.

关于cron表达式可自行百度匹配规则.能多学一点是一点,学多了自然见识就长了...