首页 > 其他分享 >设置springboot scheduled多线程,解决多个定时任务并发问题(转载)

设置springboot scheduled多线程,解决多个定时任务并发问题(转载)

时间:2024-06-14 09:32:36浏览次数:21  
标签:scheduled springboot public 任务 线程 Async 定时 多线程 class

项目上有几个定时任务都是同时间点要执行的,最近发现多个定时任务为单线程排队执行,后来经过查资料发现@schedule注解默认是单线程的,如果定时任务比较多或者有的定时任务比较耗时,会影响到其他定时任务的执行,通过以下方法解决多个定时任务同时并发执行问题。
第1种:增加配置类

@Configuration
public class ScheduleConfig {
/**
* 修复同一时间无法执行多个定时任务问题。@Scheduled默认是单线程的
*/
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
//核心线程池数量,方法: 返回可用处理器的Java虚拟机的数量。
taskScheduler.setPoolSize(Runtime.getRuntime().availableProcessors() * 2);
return taskScheduler;
}
}

第2种:效果其实和第一种一样

@Configuration
public class ScheduleConfig1 implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(
new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2)
);
}
}

第3种:配置文件添加task配置

server:
port: 8081
spring:
application:
name: daily-task
task:
scheduling:
pool:
size: 8 #配置Scheduled定时任务为多线程

第4种:添加@EnableAsync注解,在相应方法上添加@Async注解

注意:该方法会导致,同一个任务,即使上一次执行还未完成,只要时间到,就会再次执行该任务
@Async异步方法默认使用Spring创建ThreadPooITaskExecutor(参考TaskExecutionAutoCorlfiguration ) 。其中默认核心线程数为 8 ,默认最大队列和默认最大线程数都是Integer.MAX_VALUE。创建新线程的条件是队列填满时,而这样的配置队列永远不会填满,如果有@Async注解标注的方法长期占用线程(比如HTTP 长连接等待获取结果 》,在核心 8 个线程数占用满了之后,新的调用就会进入队列,外部表现为没有执行。

@SpringBootApplication
@EnableScheduling
@EnableAsync
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
@Component
public class TestAJob {
private static final Logger logger = LoggerFactory.getLogger(TestAJob.class);
@Async
@Scheduled(cron = "*/2 * * * * ?")
public void testA() throws InterruptedException {
Thread.sleep(10000);
logger.info("testA 执行==============");
}
}
@Component
public class TestBJob {
private static final Logger logger = LoggerFactory.getLogger(TestBJob.class);
@Async
@Scheduled(cron = "*/2 * * * * ?")
public void testB() {
logger.info("testB 执行==============");
}
}
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_27480007/article/details/126598195

标签:scheduled,springboot,public,任务,线程,Async,定时,多线程,class
From: https://www.cnblogs.com/wjsqqj/p/18247163

相关文章

  • 基于SpringBoot+Vue+uniapp的餐厅点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的球队训练信息管理系统的详细设计和实现(源码+lw+部署文档
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的高校图书馆个性化服务的详细设计和实现(源码+lw+部署文档
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 多线程与多进程
    1.进程和线程的定义进程线程的定义:进程可以理解为在操作系统中一个运行起来的程序(程序是指令、数据及其组织形式,进程是程序的实体),是操作系统进行资源分配的最小单位。线程是进程中的一个执行流,是操作系统进行系统调度的最小单位,一个进程由一个或多个线程组成。2.多进程和多线程......
  • java:【@ComponentScan】和【@SpringBootApplication】扫包范围的冲突
    #代码结构如下:注意【com.chz.myBean.branch】和【com.chz.myBean.main】这两个包是没有生重叠的。主程序【MyBeanTest1、MyBeanTest2、MyBeanTest3】这两个类是在包【com.chz.myBean.main】下#示例代码【pom.xml】<dependency><groupId>org.springframework.bo......
  • 【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档
    1项目功能【java计算机专业学长毕业设计分享】智慧图书管理系统JavaSpringBootvueHTMLMySQL前后端分离2项目介绍系统功能:智慧图书管理系统包括管理员和用户两种角色。管理员的功能包括在个人中心修改个人信息和密码,管理员功能模块管理管理员。基础数据管理模......
  • 爬虫 | 多线程、多进程、协程
    进程和线程"""进程中至少有一条线程,线程和进程的开启非常类似,这里就展示线程"""fromthreadingimportThreadfrommultiprocessingimportProcess#第一种开启的方法就是直接defdeffunc(name):foriinrange(100):print(name,i)if__name__=='__ma......
  • springboot Invalid bound statement (not found): com.elitel.xxx.dao.xxx 错误处
    如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,一起学习,共同进步!今天给同事看了个问题,发现了这个问题,之前也遇见过,可是没有遇见这种情况,这次我记录一下。首先来说,造成这个错误的原因是什么。它是在SpringBoot应用程序中遇到“Invalidboundstatement(not......
  • springboot SSM 宠物医院管理系统(源码+论文)
    绪论1.1计算机管理信息系统的发展情况1958年美国首先提出了“管理信息系统”(即MIS:ManagementInformationSystems),从而也引出了另外一个概念——“管理信息系统”。综合其多种定义以及根据在实际中的应用,管理信息系统可以定义为是一个由人、计算机系统等组成的,能进行......
  • SpringBoot问卷管理系统-计算机毕业设计源码71781
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,问卷调查当然也不例外。问卷管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进行......