- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我希望 spring 从 TaskExecutionAutoConfiguration
加载默认的 ThreadPoolTaskExecutor
。虽然我想为一些明确的副任务提供可能拥有的额外执行程序:
@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/
我是一名优秀的程序员,十分优秀!