package com.ruoyi.energymeter.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ThreadPoolExecutor; /** * 水电表同步线程池:任务池限制第三方并发,编排池避免同一批次阻塞任务执行。 */ @Configuration public class EnergyMeterExecutorConfig { @Bean(name = "energyMeterSyncExecutor") public ThreadPoolTaskExecutor energyMeterSyncExecutor(EnergyMeterProperties properties) { int concurrency = Math.max(1, properties.getConcurrency()); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(concurrency); executor.setMaxPoolSize(concurrency); executor.setQueueCapacity(5000); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("energy-meter-task-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(30); return executor; } @Bean(name = "energyMeterRunExecutor") public ThreadPoolTaskExecutor energyMeterRunExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(4); executor.setQueueCapacity(500); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("energy-meter-run-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(30); return executor; } }