spring java 定时任务_spring定时任务的几种实现方式
近日项目开发中需要执行一些定时任务,比如需要在每天早上9:00,准时发布信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合
spring框架来介绍。
一.分类
从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):
Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。
使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。
从作业类的继承方式来讲,可以分为两类:
作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
作业类即普通的java类,不需要继承自任何基类。
注:个人推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。
从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:
每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
每到指定时间则触发一次,在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(),0, 1000*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 findAllBook(){ //不带参数
System.out.println("BookScheduleTask.findAllBook()");
return bookService.findBook(1);
}
}
//3、在ApplicationContext.xml配置文件中写如下配置:
说明:(1)该配置,相信大家用过spring的都知道是什么意思,
是spring用于扫描注解的
(2),该配置的作用是定义一个时间计划任务,定义某个类下面某个方法在某个时间执行。
,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
spring java 定时任务_spring定时任务的几种实现方式相关推荐
- java foreach hashmap_在 Java 中遍历 HashMap 的5种最佳方式
在本文中,我们将通过示例讨论在 Java 上遍历 HashMap 的五种最佳方式. 使用 Iterator 遍历 HashMap EntrySet 使用 Iterator 遍历 HashM ...
- Java中List集合的三种遍历方式(全网最详)
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- java线程的任务的三种创建方式,严格地说,就一种,就是如何重写Runnable接口的run()方法
仅简单演示Java中线程任务的三种创建方式 第一种:使用了适配器模式,有返回值,能抛出异常,任务代码写在Callable.call()方法中,Runnable的run方法会通过适配器调用到Callab ...
- java 异步定时任务_spring 定时任务 异步调用
本篇仅限于 Spring 定时任务 & 异步调用的基本使用,不涉及深入原理探究,先学会怎么用,再探究原理. 环境:SpringBoot 2.0 定时任务指的是应用程序在指定的时间执行预先定义好 ...
- spring java配置_Spring Java配置
spring java配置 我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration(aka JavaConfig). Spring 3.0引入了此功能 ...
- spring java配置_Spring:使基于Java的配置更加优雅
spring java配置 大家好,我很久没有写新文章了. 积累了很多资料,需要在不久的将来在我的博客中发布. 但是现在我想谈谈Spring MVC应用程序配置. 确切地说,我想谈谈基于Java的Sp ...
- spring 整合 mybatis 中数据源的几种配置方式
因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...
- java servlet接口开发_servlet三种实现方式之一实现servlet接口
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...
- Spring 依赖注入的理解及三种注入方式
Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...
- Java本地高性能缓存的几种实现方式
Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche. ...
最新文章
- 如何将光标定位到行尾
- 前端框架 渐进式框架
- 从零开始编写自己的C#框架(18)——Web层后端权限模块——菜单管理
- Android Studio 日志工具
- c++将文本中的字符串一次读入到内存
- java media.player_关于Java:如何正确发布Android MediaPlayer
- CSS 文本缩进text-indent属性
- nms python代码_?标检测中的?极?值抑制算法(nms):python代码解析
- Open3d之多视角点云配准
- php preg_match 只匹配第一个字符_PHP正则表达式核心技术完全详解 第3节
- 苹果手机vnc进linux的服务器,linux服务器vnc远程连接,怎么使用linux服务器进行vnc远程连接?...
- 防止系统页面被加载进 iframe 子窗口
- java读取Excel文件并各方案对比
- new QPushbutton 时程序崩溃
- ORA-39126\ORA-06502\LPX-00225: end-element tag “HIST_GRAM_LIST_ITEM“ does not match start-element ta
- ISCC2021-部分题目再现
- linux 图片压缩命令,Linux:优化和压缩JPEG和PNG图片的命令行工具
- error: File: XX 520.13 MB, exceeds 100.00 MB以上大文件导致push失败解决方法
- 上海域格ASR和高通模块 USB端口分配及Linux下拨号说明
- iOS7到iOS8 一个通用的横竖屏幕切换总结
热门文章
- oracle忘记sys密码处理
- PetShop 4.0学习笔记:消息队列MSMQ
- 使用git命令把自己的代码上传到gitlab上
- 或许是介绍Android Studio使用Git最详细的文章
- 牛腩学ASP.NET CORE做博客(视频)
- [System Design] 系统设计 (2) -- 数据库设计
- Web API应用架构在Winform混合框架中的应用(5)--系统级别字典和公司级别字典并存的处理方式...
- Activity的几种启动模式介绍
- 中国网站备案制度——祸国殃民
- console_init初始化的研究