首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot:如何为每个调度器任务创建新的线程池

Spring Boot:如何为每个调度器任务创建新的线程池
EN

Stack Overflow用户
提问于 2021-05-08 01:43:02
回答 1查看 579关注 0票数 2

我们有一个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);

}

在这里,所有调度器任务都间接引用相同的线程池来执行异步方法。瓶颈问题出现的地方。

将会很有帮助。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-05-08 03:31:26

您可以在application.properties中配置池大小。这将允许您同时执行多个调度程序。

代码语言:javascript
复制
spring.task.scheduling.pool.size=10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67439534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档