Aysnc的异步执行的线程池 spring线程池(同步、异步)

ProxyAsyncConfiguration.java源码:

@Configuration
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public class ProxyAsyncConfiguration extends AbstractAsyncConfiguration {

    @Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
        Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
        AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
        Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
        if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
            bpp.setAsyncAnnotationType(customAsyncAnnotation);
        }
        if (this.executor != null) {
            bpp.setExecutor(this.executor);
        }
        if (this.exceptionHandler != null) {
            bpp.setExceptionHandler(this.exceptionHandler);
        }
        bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
        bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
        return bpp;
    }

}

AbstractAsyncConfiguration.java源码:

    @Autowired(required = false)
    void setConfigurers(Collection<AsyncConfigurer> configurers) {
        if (CollectionUtils.isEmpty(configurers)) {
            return;
        }
        if (configurers.size() > 1) {
            throw new IllegalStateException("Only one AsyncConfigurer may exist");
        }
        AsyncConfigurer configurer = configurers.iterator().next();
        this.executor = configurer.getAsyncExecutor();
        this.exceptionHandler = configurer.getAsyncUncaughtExceptionHandler();
    }

AsyncDefaultAutoConfiguration.java源码:

public class AsyncDefaultAutoConfiguration {

    @Autowired private BeanFactory beanFactory;

    @Configuration
    @ConditionalOnMissingBean(AsyncConfigurer.class)
    @ConditionalOnProperty(value = "spring.sleuth.async.configurer.enabled", matchIfMissing = true)
    static class DefaultAsyncConfigurerSupport extends AsyncConfigurerSupport {

        @Autowired private BeanFactory beanFactory;

        @Override
        public Executor getAsyncExecutor() {
            return new LazyTraceExecutor(this.beanFactory, new SimpleAsyncTaskExecutor());
        }
    }

 更多的SimpleAsyncTaskExecutor见《spring线程池(同步、异步)

猜你喜欢

转载自www.cnblogs.com/duanxz/p/9438757.html