gpt4 book ai didi

java - 如何在 TaskExecutionAutoConfiguration 旁边创建额外的 TaskExecutor?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:38 26 4
gpt4 key购买 nike

我希望 spring 从 TaskExecutionAutoConfiguration 加载默认的 ThreadPoolTask​​Executor。虽然我想为一些明确的副任务提供可能拥有的额外执行程序:

@Bean
public ThreadPoolExecutor myRequestPool() {
return (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
}

问题:添加上面的bean,TaskExecutionAutoConfiguration不会再执行,spring-default executor也不会初始化,因为@ConditionalOnMissingBean(Executor.class) 不再匹配:

package org.springframework.boot.autoconfigure.task;

public class TaskExecutionAutoConfiguration {

@Lazy
@Bean(name = APPLICATION_TASK_EXECUTOR_BEAN_NAME)
@ConditionalOnMissingBean(Executor.class)
public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
return builder.build();
}

问题:如何让 spring 创建两个 bean?

最佳答案

TaskExecutionAutoConfiguration 中的执行器 bean 只会在处理自动配置时没有其他执行器 bean 存在(由于 @ConditionalOnMissingBean(Executor.class))时创建-配置 。因此,为了同时创建我们的执行器和 TaskExecutionAutoConfiguration 中定义的执行器,我们需要确保我们的 bean 在 TaskExecutionAutoConfiguration

之后被处理

根据 docs ,如果我们让我们的 bean 成为自动配置候选者(这需要在 META-INF/spring.factories 中添加 @Configuration 类),那么我们可以使用 @AutoConfigureAfter 将其配置为在 TaskExecutionAutoConfiguration 之后处理:

package foo.bar.baz.qux;

@Configuration
@AutoConfigureAfter(TaskExecutionAutoConfiguration.class)
public class Config {
@Bean
public ThreadPoolExecutor myRequestPool() {
return (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
}
}

然后创建 META-INF/spring.factories 其中包含:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
foo.bar.baz.qux.Config

关于java - 如何在 TaskExecutionAutoConfiguration 旁边创建额外的 TaskExecutor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com