Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解

定时任务

在Java EE企业级开发中,定时任务(也称为后台调度或周期性任务)是非常常见的一种功能,主要用于执行那些不需要用户交互,但需要按照预定时间间隔或事件触发的任务。Java EE提供了几个框架和API来处理这种需求:

  1. Java.util.Timer和TimerTask:这是最早的定时任务解决方案,它允许你在主线程之外执行任务。然而,这通常用于一次性任务,不是特别适合复杂的业务逻辑,因为线程安全性较差。

  2. ScheduledExecutorService:这个API在Java并发包中,提供了更高级别的定时任务支持。你可以创建一个ScheduledFuture对象,它可以延迟执行,定期执行或者在特定的延迟和期限后执行。这是一个线程安全且灵活的选择。

  3. Quartz Scheduler:这是一个强大的开源任务调度框架,为Java应用程序提供了一种可靠的定时任务执行机制。它支持复杂的调度规则,包括基于日期、时间间隔、cron表达式等,并且提供了易于使用的API和详细的日志记录。

  4. JSR 223 (Scripting for Java EE):允许你使用脚本语言(如JavaScript、Groovy或Python)编写定时任务,结合了Java的灵活性和这些语言的简洁性。

  5. Spring框架:Spring提供了内置的TaskExecutor和@Scheduled注解,让你可以在Spring容器中轻松地管理和调度任务,同时还提供了与其他库(如Quartz)集成的能力。

这里说的并不是要去干什么事情

而是定时去做一件工作

其实定时任务在我们的企业级开发 中非常常见

我们做一个定时任务就行哈

在指定时间前把报表计算出来

比如我们之前的缓存计算

每隔1分钟打印一下信息

还有我们的618 双11购物

只要设定在指定时间上架商品就行

示例操作

定时器方法

方法重载

可以设置是任务 还有运行时间

这里用的就是多线程

到达指定时间后执行语句

package com.bigdata1421.demo;import java.util.Timer;
import java.util.TimerTask;public class TimerTaskApp {public static void main(String[] args) {//创建一个定时器对象Timer timer=new Timer();//用定时器对象调用方法TimerTask task=new TimerTask() {@Overridepublic void run() {System.out.println("执行");}};timer.schedule(task,0,2000);}
}

开始不停打印

但人们不满足于此

研发了各种框架

quartz

普及四个概念

导入对应的依赖

     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>

接下来

创建具体执行的工作

创建quartz包下的实现类

就代表创建一个具体任务

这里不是springboot容器

只是一个java对象

package com.bigdata1421.demo.quartz;import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;public class MyQuartz extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("quartz task run...");}
}

接下来创建配置类

书写绑定

一步一步往下绑定

package com.bigdata1421.demo.config;import com.bigdata1421.demo.quartz.MyQuartz;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class QuartzConfig {@Beanpublic JobDetail printJobDetail(){//绑定具体的工作return JobBuilder.newJob(MyQuartz.class).storeDurably().build();}@Beanpublic Trigger printJobTrigger(){//绑定对应的工作明细//设置任务时间 秒 分 时 日 月 星期ScheduleBuilder scheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ? ");return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();}}

可以学习一下这个写写法

叫什么cron表达式

运行boot工程

我们发现 控制台开始打印

我们启动spring容器

发现控制台能一直打印

停止工程 会shutdown

小结

task

我们做完springboot整合Quartz后

我们发现台繁琐了

我们先写了具体要写的类

然后还得写一堆配置类

把他们绑到一块

我们有简化的办法

在启动类里用注解开启定时任务的功能

package com.bigdata1421.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
//开启定时任务功能
@EnableScheduling
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

写一个类

这个类定义了定时任务

package com.bigdata1421.demo.quartz;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class MyBean {@Scheduled(cron ="0/1 * * * * ?")public void print(){System.out.println("spring task run");}}

这样就能一直执行

小结

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何制作 PDF 文件

本文概述了如何使用 Microsoft Word、GeekerPDF、Google Docs 和 Mac Pages 创建 PDF。您还可以使用免费的 PDF 创建器&#xff1b;有许多可供下载或在线使用的创建器。 如何使用 Microsoft Word 创建 PDF 如果您拥有 2007 或更高版本的 Microsoft Word&#xff0c;创建 PDF 的…

深入解析软件架构中的分层架构

目录 前言1. 什么是分层架构1.1 分层架构的基本概念1.2 分层架构的优势 2. 分层架构的具体实现2.1 表示层2.2 应用层2.3 数据访问层2.4 数据层 3. 分层架构的实践与挑战3.1 分层架构的实践经验3.2 分层架构的常见挑战 结语 前言 在软件开发过程中&#xff0c;架构设计是决定项…

【 ClickHouse】 ClickHouse数据类型(整型、浮点型、布尔型、Decimal型、字符串、数组、时间类型)(二)

ClickHouse数据类型 整型 固定长度的整型&#xff0c;包括有符号整型或无符号整型。 1)整型范围&#xff1a; Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807]2)无符号整型范围&…

结构思考力:让你的思维更有条理

在这个信息爆炸的时代&#xff0c;如何让自己的思维更有条理&#xff0c;更高效地沟通显得尤为重要。最近读了《结构思考力》一书。今天&#xff0c;我想和大家分享一下读后感&#xff0c;从以下几个方面展开&#xff1a;1. 什么是结构思考力及其重要性&#xff1b;2. 为什么要…

SpringMVC—RequestMapping注解

一、RequestMapping注解 RequestMapping注解&#xff1a;是Spring MVC框架中的一个控制器映射注解&#xff0c;用于将请求映射到相应的处理方法上&#xff0c;具体来说&#xff0c;他可以将指定URL的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 …

汇编语言实验三 顺序结构程序设计

编写一个32为加法程序&#xff0c;将已经定义好的双字变量X、Y相加之和存放到变量Z中&#xff08;不考虑溢出&#xff09;。 .model small,c .stack 200 .data x dd 22223333H y dd 44445555H z dd ? ;Z最终值为66668888H .code .startup mov ax,word ptr x ;ptr用来指示操作…

leetcode498 对角线遍历

题目 给你一个大小为 m x n 的矩阵 mat &#xff0c;请以对角线遍历的顺序&#xff0c;用一个数组返回这个矩阵中的所有元素。 示例 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,4,7,5,3,6,8,9] 解析 本题目主要考察的就是模拟法&#xff0c;首…

【C语言】解决C语言报错:Null Pointer Dereference

文章目录 简介什么是Null Pointer DereferenceNull Pointer Dereference的常见原因如何检测和调试Null Pointer Dereference解决Null Pointer Dereference的最佳实践详细实例解析示例1&#xff1a;未初始化的指针示例2&#xff1a;释放内存后未将指针置为NULL示例3&#xff1a;…

9.回文数字

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#xff0c;而…

洛谷:P5705【深基2.例7】数字反转

1. 题目链接 https://www.luogu.com.cn/problem/P5705 【深基2.例7】数字反转 2. 题目描述 输入一个大于等于100&#xff0c;小于1000的小数点后一位的浮点数&#xff0c;要求把这个数翻转过来 输入&#xff1a;一行一个浮点数 输出&#xff1a;一行一个浮点数 3. 我的思考 …

从素人到音乐大师,AI降低创作门槛的背后思考

AI在音乐领域的应用无疑为创作带来了革命性的变化&#xff0c;既创造了新的可能性&#xff0c;也引发了对其潜在影响的深刻讨论。 创造方面&#xff1a; 降低门槛与激发创新&#xff1a;AI音乐大模型使得音乐创作不再是专业人士的专属领地&#xff0c;普通人也能利用AI技术快…

MacOS - 启动台(LaunchPad)缺少应用软件图标

问题描述 MacOS 有时会遇到已安装的软件在启动台&#xff08;LaunchPad&#xff09;中找不到的 bug&#xff0c;这种情况在新安装软件时易出现。 原因分析 首先去访达&#xff08;Finder&#xff09;中的“应用程序”文件夹确认是否已安装某软件&#xff08;LaunchPad 中图标…

next是什么???

大家都知道最近出了一个很火的框架&#xff0c;Next.js框架。很多大公司&#xff08;例如&#xff1a;Tencent腾讯&#xff0c;docker&#xff0c;Uber&#xff09;的项目都在使用这个Next.js框架。那Next.js到底是一个什么框架呢&#xff1f;Next.js有什么优点呢&#xff1f;今…

Linux--08---挂载分区

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.查看系统磁盘分区情况1.lsblk 查看2.fdisk -l 2.挂载未分区磁盘1. 创建分区2. 格式化分区3. 创建挂载点4. 挂载分区5. 更新 /etc/fstab6.验证挂载 3.修改挂载的磁…

并发修改账户余额不一致问题与解决方法悲观锁select…for update

并发修改账户余额不一致问题与解决方法悲观锁select…for update 问题描述&#xff1a; a事务进行增加金额操作&#xff0c;需要操作account表 对余额balance进行加减 并生成操作明细account_operation_detail a事务查询account 余额100 对余额进行进行加10 b事务查询accou…

如何在Android开发中应用SOLID原则

SOLID 原则是面向对象编程的一组设计原则&#xff0c;有助于开发健壮、可维护和可扩展的软件系统。SOLID 是以下五个原则的首字母缩写&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;开放封闭原则&#xff08;Open/Closed Principle,…

Docker 技术入门与实战:docker安装

1. 引言 在本节中&#xff0c;我们将讨论 Docker 的安装步骤&#xff0c;无论您是在 Linux、Windows 还是 macOS 上&#xff0c;都可以通过简单的步骤完成安装&#xff0c;并验证 Docker 是否成功安装&#xff0c;为后续学习和实践奠定基础。 2. 安装 Docker 在 Linux 上安装…

谱写数字金融大文章,金仓助力金融强国建设

中央金融工作会议提出&#xff0c;“做好科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章”&#xff0c;这既是金融领域推进高质量发展的内在要求&#xff0c;也是建设金融强国的有效实现路径。人大金仓积极践行国家战略&#xff0c;贯彻中央金融工作精神&#xf…

2024-Pop!_OS新版本,新桌面环境的消息

原文:A Blog to Satisfy Your Monthly COSMIC Fix(es) - System76 Blog Pop!_OS开发团队正在为他们的发行版开发一个定制桌面。这个新的桌面环境被称为COSMIC&#xff0c;是用Rust语言编写的&#xff0c;超快的COSMIC应用商店几乎已经实现&#xff01;alpha版本只剩下一些次要…

一个跟随随便移动的div盒子(vue版本)

废话不多说&#xff0c;直接上代码&#xff0c;已验证&#xff0c;功能正常 代码来源GPT4o:GPT4o <template><div id"app"><div id"followMe" :style"divStyle">跟随鼠标的Div</div></div> </template> &l…