spring定时任务的几种实现方式详解编程语言
2023-06-13 09:20:44 时间
近日项目开发中需要执行一些定时任务,比如需要在每天早上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 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表示时间表达式,具体详细的表达式 可以百度查询。
// 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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15350.html
cgojavaxml相关文章
- Spring Boot的ORM框架使用(一)
- spring MVC-fastjson中文乱码详解编程语言
- java 使用spring实现读写分离详解编程语言
- spring中context:property-placeholder详解编程语言
- Spring Aop 源码实现原理分析详解编程语言
- Spring Aop实现机制分析原理详解编程语言
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性详解编程语言
- Spring详解(六)——AspectJ 实现AOP编程语言
- Spring任务调度之Spring-Task详解编程语言
- Spring Cloud(七):使用SVN存储分布式配置中心文件和实现refresh详解编程语言
- Spring Cloud(四):熔断器Hystrix详解编程语言
- Spring中bean的作用域详解编程语言
- spring 编码过滤器 防止中文乱码详解编程语言
- Spring Boot 2 (二):Spring Boot 2 动态 Banner详解编程语言
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- Spring Boot(五):spring data jpa的使用详解编程语言
- Spring Boot(一):入门篇详解编程语言
- 不修改配置的Mybatis整合Spring要点详解编程语言
- spring如何实现一个接口多个实现类的自动分配详解编程语言
- spring boot 请求地址带有.json 兼容处理详解编程语言
- 关于java idea 创建spring boot没有下载依赖的解决方案详解编程语言
- java Quartz定时器任务与Spring task定时的几种实现,详解编程语言