我们有一个web应用程序,其中我们的最终用户将被提供一个选项,以动态调度作业,以向一组人发送某种类型的报告。即,在UI中,他们选择日期、时间和时区。使用Spring Boot Scheduler动态调度作业。
目前,我们使用单线程池将报告异步发送到一组人,这是计划作业的一部分。
但是有可能多个人同时调度作业,例如,5个用户调度作业以在明天上午9点执行在此场景中,由于我对应用程序中的所有调度作业使用单线程池,因此一旦第一个作业执行,则执行第二个作业。
那么,有没有可能为每个调度的作业动态地使用单独的线程池呢?这就像每个调度作业都有一个具有request作用域的线程池bean。或实现独立任务执行的任何其他可选方案。
@Scheduled(cron="0 0 1** *")
公共空schedulerTask() {
*List users = userDao.getProfiles();//从数据库拉取用户
( user user: users) {
*callToAsyncMethod(User);//调用调度器中的异步方法
}
因为我们从db中拉出了多个用户,使用线程池进行异步执行。
公共空callToAsyncMethod(用户用户){
System.out.println("Hello“+ user.getName() + ",欢迎使用排定程序作业”);
}
公共ThreadPoolTaskExecutor customTaskExecutor() {
*线程池任务执行器customTaskExecutor=新ThreadPoolTaskExecutor();
* customTaskExecutor.setMaxPoolSize(10);
* customTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
}
在这里,所有调度器任务都间接引用相同的线程池来执行异步方法。瓶颈问题出现的地方。
将会很有帮助。谢谢。
发布于 2021-05-08 03:31:26
您可以在application.properties中配置池大小。这将允许您同时执行多个调度程序。
spring.task.scheduling.pool.size=10https://stackoverflow.com/questions/67439534
复制相似问题