美文网首页
聊聊springboot的Customizer

聊聊springboot的Customizer

作者: go4it | 来源:发表于2023-08-21 09:31 被阅读0次

    本文主要研究一下springboot的Customizer

    TaskExecutorCustomizer

    @FunctionalInterface
    public interface TaskExecutorCustomizer {
    
        /**
         * Callback to customize a {@link ThreadPoolTaskExecutor} instance.
         * @param taskExecutor the task executor to customize
         */
        void customize(ThreadPoolTaskExecutor taskExecutor);
    
    }
    

    之后再构造的时候通过ObjectProvider获取即可

        @Bean
        @ConditionalOnMissingBean
        public TaskExecutorBuilder taskExecutorBuilder(TaskExecutionProperties properties,
                ObjectProvider<TaskExecutorCustomizer> taskExecutorCustomizers,
                ObjectProvider<TaskDecorator> taskDecorator) {
            TaskExecutionProperties.Pool pool = properties.getPool();
            TaskExecutorBuilder builder = new TaskExecutorBuilder();
            builder = builder.queueCapacity(pool.getQueueCapacity());
            builder = builder.corePoolSize(pool.getCoreSize());
            builder = builder.maxPoolSize(pool.getMaxSize());
            builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
            builder = builder.keepAlive(pool.getKeepAlive());
            Shutdown shutdown = properties.getShutdown();
            builder = builder.awaitTermination(shutdown.isAwaitTermination());
            builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
            builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
            builder = builder.customizers(taskExecutorCustomizers.orderedStream()::iterator);
            builder = builder.taskDecorator(taskDecorator.getIfUnique());
            return builder;
        }
    
        /**
         * Set the {@link TaskExecutorCustomizer TaskExecutorCustomizers} that should be
         * applied to the {@link ThreadPoolTaskExecutor}. Customizers are applied in the order
         * that they were added after builder configuration has been applied. Setting this
         * value will replace any previously configured customizers.
         * @param customizers the customizers to set
         * @return a new builder instance
         * @see #additionalCustomizers(TaskExecutorCustomizer...)
         */
        public TaskExecutorBuilder customizers(TaskExecutorCustomizer... customizers) {
            Assert.notNull(customizers, "Customizers must not be null");
            return customizers(Arrays.asList(customizers));
        }   
    

    TaskSchedulerCustomizer

    @FunctionalInterface
    public interface TaskSchedulerCustomizer {
    
        /**
         * Callback to customize a {@link ThreadPoolTaskScheduler} instance.
         * @param taskScheduler the task scheduler to customize
         */
        void customize(ThreadPoolTaskScheduler taskScheduler);
    
    }
    
        @Bean
        @ConditionalOnMissingBean
        public TaskSchedulerBuilder taskSchedulerBuilder(TaskSchedulingProperties properties,
                ObjectProvider<TaskSchedulerCustomizer> taskSchedulerCustomizers) {
            TaskSchedulerBuilder builder = new TaskSchedulerBuilder();
            builder = builder.poolSize(properties.getPool().getSize());
            Shutdown shutdown = properties.getShutdown();
            builder = builder.awaitTermination(shutdown.isAwaitTermination());
            builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
            builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
            builder = builder.customizers(taskSchedulerCustomizers);
            return builder;
        }
    
        /**
         * Set the {@link TaskSchedulerCustomizer TaskSchedulerCustomizers} that should be
         * applied to the {@link ThreadPoolTaskScheduler}. Customizers are applied in the
         * order that they were added after builder configuration has been applied. Setting
         * this value will replace any previously configured customizers.
         * @param customizers the customizers to set
         * @return a new builder instance
         * @see #additionalCustomizers(TaskSchedulerCustomizer...)
         */
        public TaskSchedulerBuilder customizers(TaskSchedulerCustomizer... customizers) {
            Assert.notNull(customizers, "Customizers must not be null");
            return customizers(Arrays.asList(customizers));
        }   
    

    RestTemplateCustomizer

    @FunctionalInterface
    public interface RestTemplateCustomizer {
    
        /**
         * Callback to customize a {@link RestTemplate} instance.
         * @param restTemplate the template to customize
         */
        void customize(RestTemplate restTemplate);
    
    }
    
        @Bean
        @Lazy
        @ConditionalOnMissingBean
        public RestTemplateBuilderConfigurer restTemplateBuilderConfigurer(
                ObjectProvider<HttpMessageConverters> messageConverters,
                ObjectProvider<RestTemplateCustomizer> restTemplateCustomizers,
                ObjectProvider<RestTemplateRequestCustomizer<?>> restTemplateRequestCustomizers) {
            RestTemplateBuilderConfigurer configurer = new RestTemplateBuilderConfigurer();
            configurer.setHttpMessageConverters(messageConverters.getIfUnique());
            configurer.setRestTemplateCustomizers(restTemplateCustomizers.orderedStream().collect(Collectors.toList()));
            configurer.setRestTemplateRequestCustomizers(
                    restTemplateRequestCustomizers.orderedStream().collect(Collectors.toList()));
            return configurer;
        }
    

    小结

    springboot提供了很多Customizer接口方便用户自行扩展,非常值得设计组件的时候使用

    相关文章

      网友评论

          本文标题:聊聊springboot的Customizer

          本文链接:https://www.haomeiwen.com/subject/kviemdtx.html