springboot的Customizer源码解析

 更新时间:2023年08月22日 09:56:42   作者:codecraft  
这篇文章主要为大家介绍了springboot的Customizer源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下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源码解析的详细内容,更多关于springboot Customizer的资料请关注脚本之家其它相关文章!

相关文章

  • 详解HDFS多文件Join操作的实例

    详解HDFS多文件Join操作的实例

    这篇文章主要介绍了详解HDFS多文件Join操作的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • Java中操作数组的Arrays类

    Java中操作数组的Arrays类

    大家好,本篇文章主要讲的是Java中操作数组的Arrays类,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 在Java中判断两个Long对象是否相等

    在Java中判断两个Long对象是否相等

    这篇文章主要介绍了在Java中判断两个Long对象是否相等的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java构造函数与普通函数用法详解

    Java构造函数与普通函数用法详解

    本篇文章给大家详细讲述了Java构造函数与普通函数用法以及相关知识点,对此有兴趣的朋友可以参考学习下。
    2018-03-03
  • mybatis-flex与springBoot整合的实现示例

    mybatis-flex与springBoot整合的实现示例

    Mybatis-flex提供了简单易用的API,开发者只需要简单的配置即可使用,本文主要介绍了mybatis-flex与springBoot整合,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • JAXB命名空间及前缀_动力节点Java学院整理

    JAXB命名空间及前缀_动力节点Java学院整理

    这篇文章主要给大家介绍了关于JAXB命名空间及前缀的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • Java调用Oss JDk实现删除指定目录下的所有文件

    Java调用Oss JDk实现删除指定目录下的所有文件

    这篇文章主要为大家详细介绍了Java如何调用Oss JDk实现删除指定目录下的所有文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2025-03-03
  • Maven及Springboot配置JDK版本,编码,源码打包等方式

    Maven及Springboot配置JDK版本,编码,源码打包等方式

    这篇文章主要介绍了Maven及Springboot配置JDK版本,编码,源码打包等方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解Mybatis中的select方法

    详解Mybatis中的select方法

    这篇文章主要介绍了Mybatis的select方法,通过代码给大家详细介绍了selectByExample方法,selectById方法,需要的朋友可以参考下
    2018-07-07
  • Spring容器的创建过程之如何注册BeanPostProcessor详解

    Spring容器的创建过程之如何注册BeanPostProcessor详解

    关于BeanPostProcessor 各位一定不陌生,今天整理的这篇文章总结了如何注册BeanPostProcessor,文中有非常详细的图文示例,需要的朋友可以参考下
    2021-06-06

最新评论