Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring引导异步任务处理对象数组_Spring_Spring Boot_Spring Async - Fatal编程技术网

spring引导异步任务处理对象数组

spring引导异步任务处理对象数组,spring,spring-boot,spring-async,Spring,Spring Boot,Spring Async,我有一个要求,我从http请求中获得一个对象列表,我需要响应202并计划并行处理的对象数组 @Configuration @EnableAsync public class AsyncConfiguration { @Bean(name = "asyncExecutor") public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(

我有一个要求,我从http请求中获得一个对象列表,我需要响应202并计划并行处理的对象数组

@Configuration
@EnableAsync
public class AsyncConfiguration 
{
    @Bean(name = "asyncExecutor")
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(1000);
        executor.setThreadNamePrefix("AsynchThread-");
        executor.initialize();
        return executor;
    }
}



@Service
public class AsyncService {

    private static Logger log = LoggerFactory.getLogger(AsyncService.class);

    @Async("asyncExecutor")
    public void  processEmpoyess(List<Employees> employees) throws InterruptedException 
    {

        employees.forEach( item->{ log.info(item.name); try {
            log.info("Going to sleep " + item.name);
            Thread.sleep(10000); /* my business logic for each employee may take 5 to 10 seconds */
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } } );


        return  ;
    }

}


    @RequestMapping(value = "/employeelistfull", method = RequestMethod.POST)
    public void postAllEmployees(@RequestBody Employees  employees) throws InterruptedException, ExecutionException 
    {

        List<EmployeeAddress> listss = employees.getEmployeeList();
        service.processEmpoyess(listss);
    }
@配置
@使能同步
公共类异步配置
{
@Bean(name=“asyncExecutor”)
公共执行器异步执行器(){
ThreadPoolTaskExecutor executor=新的ThreadPoolTaskExecutor();
执行者。setCorePoolSize(10);
执行器setMaxPoolSize(10);
执行器。设置队列容量(1000);
setThreadNamePrefix(“AsynchThread-”);
executor.initialize();
返还执行人;
}
}
@服务
公共类异步服务{
私有静态记录器log=LoggerFactory.getLogger(AsyncService.class);
@异步(“异步执行器”)
public void processEmpoyess(列出雇员)抛出InterruptedException
{
employees.forEach(item->{log.info(item.name);试试{
log.info(“进入睡眠状态”+项目名称);
Thread.sleep(10000);/*我的每个员工的业务逻辑可能需要5到10秒*/
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
} } );
返回;
}
}
@RequestMapping(value=“/employeelistfull”,method=RequestMethod.POST)
public void postalleemployees(@RequestBody Employees)抛出InterruptedException、ExecutionException
{
List listss=employees.getEmployeeList();
服务流程女员工(listss);
}
在我的例子中,我可能有1000名员工,我想并行处理10个10个,每个员工的业务逻辑可能需要5到10秒

在我上面的代码中,它正在分配给异步任务,但异步任务正在一个接一个地执行。
那么,我需要在这里再创建一个异步任务并分配员工吗?或者异步任务是否有其他方法来处理列表

在将列表发送到异步方法之前,必须将列表拆分为块。你的情况是10

您可以使用具有分区功能的Google Guava:

Lists.partition(java.util.List, int) 

在这里,我可以将列表int拆分为子列表,如果我有1000个子列表,则为100个子列表,但现在我必须将这100个子列表分配给异步任务,为此,我必须迭代100次,异步任务是否有任何方法将此完整列表和批处理列表分开。不,不是现成的。好的,在分区和分配给异步任务之前,是否仍然可以获取ThreadPoolTaskExecutor的可用池详细信息?