Spring Boot Task Executor队列问题

时间:2017-01-13 21:33:14

标签: spring spring-boot

我有一个spring boot(1.4.1)应用程序,它使用以下Task Executor Configuration:

 @Bean ("taskExecutor")
 TaskExecutor taskExecutor (Environment env) {
         ThreadPoolTaskExecutor t = new ThreadPoolTaskExecutor();
         t.setCorePoolSize(Integer.parseInt( env.getProperty("ed.corePoolSize"))); //2
         t.setMaxPoolSize(Integer.parseInt( env.getProperty("ed.maxPoolSize")));   //10
         t.setQueueCapacity(Integer.parseInt( env.getProperty("ed.queueCapacity"))); //50
         t.setThreadNamePrefix(env.getProperty("ed.threadNamePrefix"));
         t.setAllowCoreThreadTimeOut(true);
         t.setKeepAliveSeconds(Integer.parseInt( env.getProperty("ed.keepAliveSeconds"))); //120
         return t;
     }

执行此 -

TaskExecutor taskExecutor = (TaskExecutor) beanFactory.getBean("taskExecutor");
        taskExecutor.execute(taskNameUpdate);

其中taskNameUpdate是Runnable任务。

当用户发送了17个请求时,它在两个线程中处理了2个请求(假设T1和T2)。当T1完成第一个任务的执行时,它从队列中选择task17,它应该选择task3。更大的问题是当T2完成当前任务时它也开始处理任务17.两个线程都执行任务17并再次开始处理任务17.

作为临时修复,我设置了corePoolSize = 10,并要求不要同时发送超过10批。

请帮我解决问题。

0 个答案:

没有答案