ThreadPoolTaskExecutor写法
@Bean(name = "taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8); // 8核CPU服务器建议值
executor.setMaxPoolSize(16); // 最大线程数
executor.setQueueCapacity(1000); // 队列容量(根据业务峰值设置)
executor.setKeepAliveSeconds(60); // 空闲线程存活时间
executor.setThreadNamePrefix("biz-"); // 线程名前缀
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
xml写法
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="8"/>
<property name="maxPoolSize" value="16"/>
<property name="queueCapacity" value="1000"/>
<property name="keepAliveSeconds" value="60"/>
<property name="threadNamePrefix" value="biz-pool-"/>
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/>
</property>
</bean>
Java代码配置与XML配置ThreadPoolTaskExecutor的核心区别如下:
1. 配置形式差异
-
Java代码配置
通过编程方式动态设置参数,适合需要运行时调整的场景(如根据系统负载动态修改线程数)。
示例中通过setter方法链式调用,可直接嵌入业务逻辑中进行条件判断。 -
XML配置
静态声明式配置,适用于部署时确定的固定参数,修改需重启应用。
通过<property>标签注入值,与Spring IOC容器深度集成。
2. 功能实现对比
| 特性 | Java代码配置 | XML配置 |
|---|---|---|
| 线程池初始化时机 | 显式调用initialize()或由Spring容器管理3 | 容器启动时自动初始化1 |
| 参数动态调整 | 支持运行时通过setCorePoolSize()等修改16 | 需重新加载配置文件14 |
| 依赖注入灵活性 | 需手动处理依赖关系 | 可通过ref引用其他Bean1 |
| 线程工厂定制 | 可直接注入自定义ThreadFactory实例12 | 需额外声明Bean再通过ref引用1 |
3. 实际应用场景
-
推荐Java代码配置
- 需要结合条件逻辑动态生成线程池参数(如根据CPU核心数计算线程数)
- 项目已采用JavaConfig风格统一管理Bean
-
推荐XML配置
- 传统Spring项目或需与遗留XML配置保持兼容
- 参数完全静态且需集中管理
4. 本质一致性
两者最终均转化为ThreadPoolExecutor实例,核心参数(如corePoolSize、queueCapacity)的行为规则完全相同。差异仅体现在配置方式和扩展灵活性上

被折叠的 条评论
为什么被折叠?



