Spring @Async limit number of threads

前端 未结 3 793
囚心锁ツ
囚心锁ツ 2020-12-03 13:34

My question is very similar to this one : @Async prevent a thread to continue until other thread have finished

Basically i need run ~ hundreds of computations in mor

相关标签:
3条回答
  • 2020-12-03 13:50

    If you are using Spring's Java-configuration, your config class needs to implements AsyncConfigurer:

    @Configuration
    @EnableAsync
    public class AppConfig implements AsyncConfigurer {
    
        [...]
    
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(2);
            executor.setMaxPoolSize(5);
            executor.setQueueCapacity(50);
            executor.setThreadNamePrefix("MyExecutor-");
            executor.initialize();
            return executor;
        }
    }
    

    See @EnableAsync documentation for more details : http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

    0 讨论(0)
  • 2020-12-03 14:00

    Have you checked out Task Executor? You can define a Thread Pool, with a maximum number of threads to execute your tasks.

    If you want to use it with @Async, use this in your spring-config:

    <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
    
    <task:executor id="myExecutor" pool-size="5"/>
    
    <task:scheduler id="myScheduler" pool-size="10"/>
    

    Full reference here (25.5.3). Hope this helps.

    0 讨论(0)
  • 2020-12-03 14:01

    Since spring boot 2.1 you can use auto configuration and change the maximum number of threads in the application properties file

    spring.task.execution.pool.max-size=4
    

    See the full documentation:
    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-task-execution-scheduling

    0 讨论(0)
提交回复
热议问题