感觉很久没写这个东西,项目太忙,人也变懒了很多,哈哈哈~近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候需要自动创建一些必要的数据到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表达式可自行百度匹配规则.能多学一点是一点,学多了自然见识就长了...