SpringBoot多线程与任务调度总结

一、前言

多线程与任务调度是java开发中必须掌握的技能,在springBoot的开发中,多线程和任务调度变得越来越简单。实现方式可以通过实现ApplicationRunner接口,重新run的方法实现多线程。任务调度则可以使用@Scheduled注解

二、使用示例

@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class ToolServiceThread implements ApplicationRunner {@Autowiredprivate TmpMUserService tmpMUserService;@Overridepublic void run(ApplicationArguments args) throws Exception {log.info("开启线程.....,");// 处理用户手机号// tmpMUserService.updateOne();}/*** 定时任务 早上0点10分*/// @Scheduled(cron = "0 10 0 * * ?")@Scheduled(cron = "0 0/10 * * * ?") // 每10分钟刷新public void hotelTask() throws Exception {}}

三、java定时任务多种实现方式

  1. 使用java.util.Timer类

import java.util.Timer;  
import java.util.TimerTask;  public class TimerExample {  public static void main(String[] args) {  Timer timer = new Timer();  TimerTask task = new TimerTask() {  @Override  public void run() {  System.out.println("执行定时任务!");  }  };  // 延迟5秒后开始执行任务,然后每隔2秒执行一次  timer.schedule(task, 5000, 2000);  }  
}

2.使用ScheduledExecutorService

ScheduledExecutorService 是Java 5及以上版本中提供的一个更加强大和灵活的定时任务执行器。

import java.util.concurrent.Executors;  
import java.util.concurrent.ScheduledExecutorService;  
import java.util.concurrent.TimeUnit;  public class ScheduledExecutorExample {  public static void main(String[] args) {  ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();  executor.scheduleAtFixedRate(() -> {  System.out.println("执行定时任务!");  }, 5, 2, TimeUnit.SECONDS); // 延迟5秒后开始执行,然后每隔2秒执行一次  }  
}

3.使用Spring的@Scheduled注解 (适用于Spring Boot应用)

如果你正在使用Spring Boot,你可以使用@Scheduled注解来轻松地实现定时任务。首先,确保你的Spring Boot应用已经启用了定时任务支持:在主类上添加@EnableScheduling注解。然后,你可以在方法上添加@Scheduled注解来指定任务的执行计划。

import org.springframework.scheduling.annotation.EnableScheduling;  
import org.springframework.scheduling.annotation.Scheduled;  
import org.springframework.stereotype.Component;  @Component  
@EnableScheduling  
public class ScheduledTasks {  @Scheduled(fixedRate = 5000) // 每隔5秒执行一次  public void doSomething() {  System.out.println("执行定时任务!");  }  
}

四、java定时任务应用场景

  1. 定时发送通知:在企业管理系统中,可以设置定时任务,定期向员工发送通知,例如会议提醒、任务更新等。
  2. 定时执行报表生成:在财务或销售部门,可以设置定时任务,定期生成报表,例如每日销售报表、月度财务报表等。
  3. 定时处理订单:在电商或物流系统中,可以设置定时任务,自动处理订单状态,例如发货、确认收货等。
  4. 定时清理缓存:对于使用缓存的系统,定时清理过期或无效的缓存可以提高系统的性能和稳定性。
  5. 定时备份数据库:类似于其他语言中的例子,Java 程序也可以设置定时任务,定期备份数据库数据。
  6. 定时启动或停止服务:在服务器管理中,可以设置定时任务,自动启动或停止服务,例如在夜间关闭一些非必要的服务以节省资源。
  7. 定时发送邮件或短信:Java 程序可以与邮件或短信服务集成,定时发送邮件或短信通知,例如会议提醒、生日祝福等。
  8. 定时执行批处理任务:对于需要批量处理数据的场景,可以设置定时任务,自动执行批处理任务,例如数据导入、数据导出等。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

TiDB SQL调优案例TiFlash

背景 早上收到某系统的告警tidb节点挂掉无法访问,情况十万火急。登录中控机查了一下display信息,4个TiDB、Prometheus、Grafana全挂了,某台机器hang死无法连接,经过快速重启后集群恢复,经排查后是昨天上线的某个SQL导…

2022年全球软件质量效能大会(QECon北京站2022)-核心PPT资料下载

一、峰会简介 当前,新一轮科技革命和产业变革正在重塑全球经济格局,以云计算为代表的新一代信息技术创新活跃,与实体经济深度融合,推动泛在连接、数据驱动、智能引领的数字经济新形式孕育而生。 新兴技术的出现给测试乃至整个软…

小米路由器2(R2D) 安装 MIXBOX

1. 先刷开发版 ROM http://www1.miwifi.com/miwifi_download.html 进入上述网页,找到 R2D 点击下载 开发版 ROM 教程 看 下载按钮上边的 “刷机教程” 刷机教程 2. 开启SSH工具 登录自己的小米账号后,里面会显示出 自己的 root密码; 默认…

记一次修复外网无法访问vmware里面的虚拟机的网络端口的问题

发现一个奇怪的网络问题,vmware里一个程序的端口通过vmnat穿透出来,然后这个端口就能够通过局域网被其他机器访问,但是另一个网段就没法访问这个端口。使用主机上的其他程序使用开启同样的端口,另一个网段的机器却可以访问。我想不…

Android Security PIN 相关代码

开发项目遇到一个问题,具体描述及复制步骤如下: 就是开启"Enhanced PIN privacy"(增强的PIN隐私)的时候输入秘密的时候还是会显示数字 如下图,应该是直接是“.” 不应该出现PIN 密码 想要的效果如下图: 设置的步骤如下图…

中职网络安全Server2002——Web隐藏信息获取

B-2:Web隐藏信息获取 任务环境说明: 服务器场景名:Server2002(关闭链接)服务器场景用户名:未知 有问题需要环境加q 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机HTTP服务子目录,将扫描子…

用户规模破亿!基于文心一言的创新应用已超4000个

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Matter协议解析记录

目录 目录 1、Matter 协议发展 1.1、什么是Matter 1.2、Matter能做什么 2、整体介绍 3、架构介绍 3.1、Matter网络拓扑结构 3.2、功能解析 3.2.1、Fabric引用和Fabric标识符 3.2.2、供应商标识符(Vendor ID,VID) 3.2.3、产品标识符…

类。。。。

定义一个person类&#xff0c;包含私有成员&#xff0c;int *age,string &name,一个stu类&#xff0c;包含私有成员double *sore,person p1,写出person类和stu类的特殊成员函数&#xff0c;并写一个stu的函数&#xff0c;显示所有信息。 #include <iostream>using n…

树莓派界面改成中文

安装完树莓派系统(Raspberry Pi OS with Desktop)&#xff0c;第一次启动时&#xff0c;时会有如下面二个图所示&#xff0c;让你选择区域时区和语言。 树莓派默认的语言为英文&#xff0c;如果你在安装时没有选择的话&#xff0c;默认的区域为英国&#xff0c;语言为英国英文&…

canal 数据同步组件

canal 数据异构组件 为啥要使用这个组件&#xff1f; 在更新DB的时候不同步更新到redis&#xff0c;es等数据库中&#xff0c;时间太久&#xff0c;而且可能会存在同步失败的问题&#xff0c;因此引入canal去拉取DB的数据&#xff0c;再去更新到redis&#xff0c;es等数据库中&…

【Gradio】1、Gradio 是什么

官网&#xff1a;https://www.gradio.app/ 一、Gradio 是什么 Gradio是一个用于创建机器学习模型交互式界面的 Python 库。通过Gradio&#xff0c;可以快速地为模型构建一个可视化的、易于使用的Web界面&#xff0c;无需编写任何Web前端代码。 Gradio 支持多种不同类型的输入…

代码随想录算法训练营第三十天|332.重新安排行程、51. N皇后 、37. 解数独

332.重新安排行程 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 文档讲解&#xff1a;代码随想录 C代码&#xff1a; class Solution { public: unordered_map<string, map<string, int>> targets;bool backtrack…

Python实现张万森下雪了的效果

写在前面 即将步入婚宴殿堂的女主林北星&#xff0c;遭遇了男友展宇的毁约&#xff0c;生活和工作也变得一团糟。与此同时&#xff0c;她被时光老人带回了十八岁的高三时光&#xff0c;重新开启了自己的人生。林北星摆脱了展宇的束缚&#xff0c;认真准备高考&#xff0c;想要…

九九乘法表c 语言 用于打印九九乘法表

以下是一个简单的C语言程序&#xff0c;用于打印九九乘法表&#xff1a; #include <stdio.h>int main() {int i, j;for (i 1; i < 9; i) {for (j 1; j < i; j) {printf("%d*%d%-2d ", j, i, i*j);}printf("\n");}return 0; }解释&#xff1…

html-css-js移动端导航栏底部固定+i18n国际化全局

需求&#xff1a;要做一个移动端的仿照小程序的导航栏页面操作&#xff0c;但是这边加上了i18n国家化&#xff0c;由于页面切换的时候会导致国际化失效&#xff0c;所以写了这篇文章 1.效果 切换页面的时候中英文也会跟着改变&#xff0c;不会导致切换后回到默认的语言 2.实现…

接口自动化框架设计之参数传递

在我们设计自动化测试框架的时候&#xff0c;我们会经常将测试数据保存在外部的文件&#xff08;如Excel、YAML&#xff09;中&#xff0c;实现测试脚本与测试数据解耦&#xff0c;方便后期维护。 当涉及到业务场景接口用例时&#xff0c;由于接口与接口存在关联关系&#xff…

Mysql For Navicate (老韩)

Navicate创建数据库 先创建一个数据库;然后在数据库中创建一张表;在表格当中填入相应的属性字段;打开表, 然后填入相应的实例字段; – 使用数据库图形化App和使用指令来进行操作各有各的好处和利弊; 数据库的三层结构(破除MySQL神秘) 所谓安装Mysql数据库, 就是在主机安装一…

线程基础知识(三)

前言 之前两篇文章介绍了线程的基本概念和锁的基本知识&#xff0c;本文主要是学习同步机制&#xff0c;包括使用synchronized关键字、ReentrantLock等&#xff0c;了解锁的种类&#xff0c;死锁、竞争条件等并发编程中常见的问题。 关键字synchronized synchronied关键字可…

java设计模式学习之【备忘录模式】

文章目录 引言备忘录模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用备忘录示例代码地址 引言 想象一下&#xff0c;你正在编辑一篇重要的文档&#xff0c;突然你意识到最近的一些更改实际上破坏了文档的结构。幸运的是&#xff0c;你的文本编辑器允许你撤…