【问题标题】:How to intercept configuration of all ThreadPoolTaskExecutors?如何拦截所有 ThreadPoolTask​​Executors 的配置?
【发布时间】:2022-02-02 08:35:12
【问题描述】:

我想拦截应用程序上下文中所有ThreadPoolTaskExecutors的创建,并将它们全部添加一个自定义TaskDecorator

伪代码:

public void interceptTaskExecutors(List<ThreadPoolTaskExecutor> executors) {
    var decorator = new MyTaskDecorator();
    executors.stream().forEach(executor -> executor.setTaskDecorator(decorator));
}

但是我如何才能真正拦截所有TaskExecutors的bean初始化过程来应用这个呢?

【问题讨论】:

  • 为防止出现 XY 问题,请使用您的用例更新问题。
  • BeanPostProcessor 可以做到这一点。检查 bean 的类型,做点什么。

标签: java spring spring-boot spring-async


【解决方案1】:

@M。 Deinum 大概意思如下:

@Configuration
public class ThreadPoolCustomizer implements BeanPostProcessor {
    @Autowired
    private TaskDecorator decorator;

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof ThreadPoolTaskExecutor)
            ((ThreadPoolTaskExecutor) bean).setTaskDecorator(decorator);
        return bean;
    }
}

【讨论】:

  • 您应该小心地将依赖项注入BeanPostProcessor。当上下文寻找TaskDecorator bean 时,它可能会导致应用程序中的许多bean 很早就被初始化。除非出于某种原因它需要成为一个 bean,否则如果您的 BeanPostProcessor 自己创建装饰器会更好。
  • 感谢您的建议,到时会这样做的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2012-10-03
  • 2011-08-04
相关资源
最近更新 更多