java - 如何在 TaskExecutionAutoConfiguration 旁边创建额外的 TaskExecutor?
问题描述
我希望 springThreadPoolTaskExecutor
从TaskExecutionAutoConfiguration
. 虽然我想为一些明确的副任务提供可能拥有额外的执行者:
@Bean
public ThreadPoolExecutor myRequestPool() {
return (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
}
问题:加上上面的bean,TaskExecutionAutoConfiguration
就不会再执行了,spring-default执行器也不会被初始化,因为@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?
解决方案
只有在处理自动配置时(由于)不存在其他执行器bean 时,TaskExecutionAutoConfiguration
才会创建执行器 bean 。@ConditionalOnMissingBean(Executor.class)
所以,为了创建我们的执行器和定义的执行TaskExecutionAutoConfiguration
器,我们需要确保我们的bean在之后被处理。TaskExecutionAutoConfiguration
根据docs,如果我们让我们的 bean 成为自动配置候选者(这需要@Configuration
在 中添加类META-INF/spring.factories
),那么我们可以使用@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
推荐阅读
- css - 在 Wordpress 中为移动设备更改一个特定页面的 css
- javascript - 如何使用猫鼬从字符串数组中的对象数组返回字段
- html - 不能并排放置 div
- python - 有没有更快的方法来查找数据框中的常量值范围?
- javascript - 防止javascript mediarecorder在同时缓冲播放期间波动音量
- angular - Angular FormAray 组件
- angular - 如何在 Angular 10 中使用带有切换选项的侧面导航
- python-3.x - CNN:图像过滤步幅
- activemq - 使用异步传递发送消息时提高性能
- python - 如何解决加载 Geopy 额外速率限制器错误?