在Spring Boot中实现多线程任务调度

在Spring Boot中实现多线程任务调度

大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

1. Spring Boot中的任务调度

Spring Boot通过集成Spring框架的Task Execution和Scheduling支持,提供了强大的任务调度功能。我们可以利用这些特性来实现多线程任务调度,处理定时任务和异步任务等需求。

2. 使用@Scheduled注解

Spring Boot中的@Scheduled注解可以很方便地定义定时任务。我们可以将一个方法标记为定时任务,并设置定时执行的周期或者固定延迟时间。

package cn.juwatech.scheduling;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("Current time: " + System.currentTimeMillis());
    }

    @Scheduled(cron = "0 0 12 * * ?")
    public void executeDailyTask() {
        System.out.println("Executing daily task at noon.");
    }
}

上述示例中,reportCurrentTime方法每隔5秒输出当前时间,executeDailyTask方法每天中午12点执行一次任务。

3. 使用ThreadPoolTaskExecutor实现异步任务

除了定时任务,Spring Boot还支持异步任务的处理。我们可以配置ThreadPoolTaskExecutor来执行异步任务,实现并发处理。

package cn.juwatech.async;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncTaskService {

    @Async
    public void executeAsyncTask(int taskNumber) {
        System.out.println("Executing async task: " + taskNumber);
    }
}

在上述示例中,executeAsyncTask方法被@Async注解标记,表明这是一个异步任务。Spring Boot会自动创建线程池来执行这些异步任务。

4. 配置线程池

为了更好地控制线程池的行为,我们可以在Spring Boot中配置ThreadPoolTaskExecutor bean。

package cn.juwatech.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

@Configuration
@EnableAsync
public class AsyncConfig {

    @Bean(name = "taskExecutor")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(25);
        executor.setThreadNamePrefix("AsyncTask-");
        executor.initialize();
        return executor;
    }
}

在上述示例中,配置了一个名为taskExecutor的线程池,设置了核心线程数、最大线程数、队列容量等参数。

5. 结合业务场景

实际应用中,我们可以根据业务需求,结合定时任务和异步任务,实现复杂的任务调度逻辑。例如,定时从外部接口获取数据并异步处理,定时生成报表等。

package cn.juwatech.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class DataProcessingService {

    @Autowired
    private ExternalAPIService externalAPIService;

    @Autowired
    private AsyncTaskService asyncTaskService;

    @Scheduled(cron = "0 0 1 * * ?")
    public void processDataFromExternalAPI() {
        String data = externalAPIService.getData();
        asyncTaskService.processData(data);
    }
}

上述示例中,定时任务processDataFromExternalAPI每天凌晨1点从外部API获取数据,并通过异步任务处理数据。

微赚淘客系统3.0小编出品,必属精品,转载请注明出处!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python库(6):Pygments库

1 Pygments介绍 在软件开发和文档编写中,代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中,通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中,Pygments库就是这样一个强大的工具,它能够将各…

【YOLOv9教程】如何使用YOLOv9进行图像与视频检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【论文阅读】AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising

论文:2406.06911 (arxiv.org) 代码:czg1225/AsyncDiff: Official implementation of "AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising" (github.com) 简介 异步去噪并行化扩散模型。提出了一种新的扩散模型分布式加…

python脚本“文档”撰写——“诱骗”ai撰写“火火的动态”python“自动”脚本文档

“火火的动态”python“自动”脚本文档,又从ai学习搭子那儿“套”来,可谓良心质量👍👍。 (笔记模板由python脚本于2024年07月07日 15:15:33创建,本篇笔记适合喜欢钻研python和页面源码的coder翻阅) 【学习的细节是欢悦…

001uboot体验

1.uboot的作用: 上电->uboot启动->关闭看门狗、初始化时钟、sdram、uart等外设->把内核文件从flash读取到SDRAM->引导内核启动->挂载根文件系统->启动根文件系统的应用程序 2.uboot编译 uboot是一个通用的裸机程序,为了适应各种芯片&…

盘点8款国内顶尖局域网监控软件(2024年国产局域网监控软件排名)

局域网监控软件对于企业网络管理至关重要,它们可以帮助IT部门维护网络安全,优化网络性能,同时监控和控制内部员工的网络使用行为。以下是八款备受推崇的局域网监控软件,每一款都有其独特的优势和适用场景。 1.安企神软件 试用版领…

【数据结构】(C语言):二叉搜索树(不使用递归)

二叉搜索树: 非线性的,树是层级结构。基本单位是节点,每个节点最多2个子节点。有序。每个节点,其左子节点都比它小,其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。 …

Report Design Analysis报告之logic level详解

目录 一、前言 二、Logic Level distribution 2.1 logic level配置 2.2 Logic Level Distribution报告 2.3 Logic Level 报告详情查看 2.4 Route Distributions 报告详情查看 2.5 示例代码 一、前言 ​在工程设计中,如果需要了解路径的逻辑级数,可…

赚钱小思路,送给没有背景的辛辛苦苦努力的我们!

我是一个没有背景的普通人,主要靠勤奋和一股钻劲,这十几年来我的日常作息铁打不变,除了睡觉,不是在搞钱,就是在琢磨怎么搞钱。 ​ 可以说打拼了十几年,各种小生意都做过,以前一直是很乐观的&…

绘唐3最新版本哪里下载

绘唐3最新版本哪里下载 绘唐最新版本下载地址 推文视频创作设计是一种通过视频和文字的形式来进行推广的方式,可以通过一些专业的工具来进行制作。 以下是一些常用的小说推文视频创作设计工具: 视频剪辑软件:如Adobe Premiere Pro、Fina…

人工智能系列-Pandas基础

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” Pandas简介 Pandas是Python语言的拓展程序库,用于数据分析。 Pandas是一个开放源码,BSD许可的库,提供高性能,易于使用的数据结…

SSM养老院管理系统-计算机毕业设计源码02221

摘要 本篇论文旨在设计和实现一个基于SSM的养老院管理系统,旨在提供高效、便捷的养老院管理服务。该系统将包括老人档案信息管理、护工人员管理、房间信息管理、费用管理等功能模块,以满足养老院管理者和居民的不同需求。 通过引入SSM框架&#x…

ChatGPT对话:Scratch编程中一个单词,如balloon,每个字母行为一致,如何优化编程

【编者按】balloon 7个字母具有相同的行为,根据ChatGPT提供的方法,优化了代码,方便代码维护与复用。初学者可以使用7个字母精灵,复制代码到不同精灵,也能完成这个功能,但不是优化方法,也没有提高…

微信小程序毕业设计-医院挂号预约系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

高考志愿填报,选专业是看兴趣还是看就业?

对于结束高考的学生来说,选择专业的确是一个非常让人头疼的事情。因为很多人都不知道,选专业的时候究竟是应该看一下个人兴趣,还是看未来的就业方向,这也是让不少人都相当纠结的问题。这里分析一下关于专业选择的问题,…

动手学深度学习(Pytorch版)代码实践 -循环神经网络-54循环神经网络概述

54循环神经网络概述 1.潜变量自回归模型 使用潜变量h_t总结过去信息 2.循环神经网络概述 ​ 循环神经网络(recurrent neural network,简称RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络。循环神经网络,是指在全…

字符串——string类的常用接口

一、string类对象的常见构造 二、string类对象的容量操作 三、string类对象的访问及遍历操作 四、string类对象的修改操作 一、string类对象的常见构造 1.string() ——构造空的string类对象,也就是空字符串 2.string(const char* s) ——用字符串来初始化stri…

【微服务】springboot对接Prometheus指标监控使用详解

目录 一、前言 二、微服务监控概述 2.1 微服务常用监控指标 2.2 微服务常用指标监控工具 2.3 微服务使用Prometheus监控优势 三、环境准备 3.1 部署Prometheus服务 3.2 部署Grafana 服务 3.3 提前搭建springboot工程 3.3.1 引入基础依赖 3.3.2 配置Actuator 端点 3.…

代码随想录算法训练营第14天|226.翻转二叉树、101. 对称二叉树、104. 二叉树的最大深度、111.二叉树的最小深度

打卡Day14 1.226.翻转二叉树2.101. 对称二叉树扩展100. 相同的树572. 另一棵树的子树 3.104. 二叉树的最大深度扩展559.n叉树的最大深度 3.111.二叉树的最小深度 1.226.翻转二叉树 题目链接:226.翻转二叉树 文档讲解: 代码随想录 (1&#x…

博客的部署方法论

有了域名后,可以方便其他人记住并访问,历史上不乏大企业花大价钱购买域名的: 京东域名换成 JD.com,并且说是为了防止百度吸引流量,为什么?唯品会买下域名 VIP.COM 或花费千万 ‍ 域名提供商 如果想要域…