首先,废话两句楼主是在开发中遇到具体需求,要用到定时器,那么大致说下两种定时器:
定时器 | Quartz | TimerTask |
---|---|---|
执行时间 | 可以通过cron表达式精确到特定时间执行 | TimerTask不能 |
效率 | 每次执行任务都创建一个新的任务类对象 | 每次使用同一个任务类对象 |
对异常的处理 | 不会因为异常,而导致定时器关闭,不再执行循环任务。 | 抛出异常后,再也没有执行此任务了,并且定时器所在的线程也自动结束 |
消耗内存 | 大于TimerTask | 小于Quartz |
使用 | 整合使用,使用简单。 | 一旦出现异常,需要在异常的时候重构事务,需要工厂模式and代理模式的加入。 |
可以根据自己的水平 and 需求选择一个合适自己的上手。下面我们上干货。
PS:Quartz 会产生内存溢出的问题,楼主还没有仔细研究,有兴趣的同学可以研究下,欢迎给我的邮箱(513933837@qq.com)发邮件一起探讨。
开发环境:Spring boot + Maven + mybatis 。
开发工具:idea
① 那么我们首先看需要的包,先看看pom.xml文件:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency><!-- 该依赖必加,里面有sping对schedule的支持 -->
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
我只截取了部分,除了这些以外,如果你是spring boot 的项目一定还要有相关配置文件,别指望我会贴出来,做梦!摔!
② 先写一个监听器保证项目启动的时候会调用到,我们的定时任务,代码如下:
package task;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
/**
* @author Lucky
* @Description 监听器
* @Date 15:08 2018/5/23
* @Param
* @return
**/