[英]Spring boot Async
我不确定 Spring 引导异步如何工作? 我知道网络服务器有自己的线程池,每个请求都由池中的一个线程处理。 现在,当我们使用 spring 启动和配置实现异步 web 服务时,假设有 10 个线程,这是否意味着线程中有线程? 澄清一下,web 服务器会将请求分配给线程。 现在,当该线程开始执行并调用标有@Asynch 的服务/函数时,它可以创建多个线程来处理请求。 请让我知道我的理解是否正确。
它不是另一个内部的线程。 @Async 将使请求在单独的线程中执行,并且请求的调用者不会等待被调用的方法完成
要启用异步,您可以添加,
@Configuration
@EnableAsync
public class AsyncExample {
// Define a threadpool executor if needed,
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
return new ThreadPoolTaskExecutor();
}
}
然后您可以使用定义的线程池执行程序定义如下异步方法,
@Async("threadPoolTaskExecutor")
public void asyncMethodWithConfiguredExecutor() {
// Method Definition
}
使用@Async 将使其在单独的线程中执行,即调用者不会等待被调用方法的完成。 并且可以配置使用的 Executor
@Configuration
@EnableAsync
public class SpringAsyncConfig {
@Bean(name = "fooExecutor")
public Executor fooExecutor() {
return new ThreadPoolTaskExecutor();
}
}
并使用 @Async("fooExecutor")
您可以进行如下配置来控制更多的线程参数,例如带前缀的线程名称,池大小,...这样您就可以确保您控制线程池。
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(5000);
executor.setThreadNamePrefix("MyThread-");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
然后将 @Async 注释放在代码 bean 或要使其异步的方法上。
有关此主题的更多信息,您可以在此处参考 spring 的调度文档。
我希望你会觉得这很有帮助;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.