From ccb3445c750156760f98d8c304291149b200669c Mon Sep 17 00:00:00 2001 From: x_z Date: Wed, 8 Mar 2023 16:46:34 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E7=BA=BF=E7=A8=8B=E6=B1=A0?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=EF=BC=8C=E5=BA=93=E5=AD=98=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=BD=BF=E7=94=A8=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/glxp/api/task/InvRemindMsgTask.java | 16 +++++++++++++++- .../com/glxp/api/task/TaskExecutorConfig.java | 6 ++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/glxp/api/task/InvRemindMsgTask.java b/src/main/java/com/glxp/api/task/InvRemindMsgTask.java index dc90292f7..7fd6b3d4d 100644 --- a/src/main/java/com/glxp/api/task/InvRemindMsgTask.java +++ b/src/main/java/com/glxp/api/task/InvRemindMsgTask.java @@ -1,6 +1,7 @@ package com.glxp.api.task; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.thread.ExecutorBuilder; import cn.hutool.core.thread.ThreadUtil; import com.glxp.api.dao.inv.InvRemindSetDao; import com.glxp.api.dao.schedule.ScheduledDao; @@ -16,6 +17,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingDeque; @Slf4j @Component @@ -28,6 +31,8 @@ public class InvRemindMsgTask implements SchedulingConfigurer { @Resource private InvRemindSetDao invRemindSetDao; + private static ExecutorService executor; + @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(this::process, triggerContext -> { @@ -39,10 +44,19 @@ public class InvRemindMsgTask implements SchedulingConfigurer { return null; } String cron = scheduled.getCron(); + initExecutor(); return new CronTrigger(cron).nextExecutionTime(triggerContext); }); } + private void initExecutor() { + executor = ExecutorBuilder.create() + .setCorePoolSize(10) + .setMaxPoolSize(300) + .setWorkQueue(new LinkedBlockingDeque<>()) + .build(); + } + private void process() { log.info("开始扫描库存信息,生成库存预警消息"); List invRemindSetEntities = invRemindSetDao.selectList(null); @@ -50,7 +64,7 @@ public class InvRemindMsgTask implements SchedulingConfigurer { log.info("库存预警设置条数:{}", invRemindSetEntities.size()); //开始生成库存信息 for (InvRemindSetEntity invRemindSetEntity : invRemindSetEntities) { - ThreadUtil.execAsync(ThreadUtil.newThread(() -> invRemindMsgService.createRemindMsg(invRemindSetEntity), "createInvRemindThread")); + executor.execute(ThreadUtil.newThread(() -> invRemindMsgService.createRemindMsg(invRemindSetEntity), "createInvRemindThread")); } } else { log.info("无库存预警设置,结束库存扫描"); diff --git a/src/main/java/com/glxp/api/task/TaskExecutorConfig.java b/src/main/java/com/glxp/api/task/TaskExecutorConfig.java index 217ecf014..bb47f7d29 100644 --- a/src/main/java/com/glxp/api/task/TaskExecutorConfig.java +++ b/src/main/java/com/glxp/api/task/TaskExecutorConfig.java @@ -4,12 +4,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.util.concurrent.Executor; @@ -26,8 +24,8 @@ public class TaskExecutorConfig implements AsyncConfigurer { public Executor getAsyncExecutor() { ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor(); threadPool.setCorePoolSize(10);//当前线程数 - threadPool.setMaxPoolSize(20);// 最大线程数 - threadPool.setQueueCapacity(5);//线程池所使用的缓冲队列 + threadPool.setMaxPoolSize(200);// 最大线程数 + threadPool.setQueueCapacity(Integer.MAX_VALUE);//线程池所使用的缓冲队列 threadPool.setWaitForTasksToCompleteOnShutdown(true);//等待任务在关机时完成--表明等待所有线程执行完 threadPool.setAwaitTerminationSeconds(60 * 15);// 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止 threadPool.setThreadNamePrefix("MyAsync-");// 线程名称前缀