zoukankan      html  css  js  c++  java
  • Spring @Async之四:Aysnc的异步执行的线程池

    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线程池(同步、异步)

  • 相关阅读:
    10 款最佳剪贴板管理器
    悉数美剧《黑客军团》中的黑客工具
    Vim的使用方法
    Mysql跨平台(Windows,Linux,Mac)使用与安装
    Linux下网络故障诊断
    RHEL6.2下挂载光驱安装软件
    MySQL数据库服务器的架设
    Unix如何轻松快速复制
    【Linux基础】Linux常用命令汇总
    博客编号数字密码
  • 原文地址:https://www.cnblogs.com/duanxz/p/9438757.html
Copyright © 2011-2022 走看看