spring - 从业者阅读器未启动后的春季批处理
问题描述
如果我们将文件路径划分为更大的数字,我们的 spring 批处理阅读器就不会启动
- 线程池执行器 30
- 我们正在从分区中的数据库读取 5000 个文件路径并添加到执行上下文中。
for (int i=0;i<rows.size();i++) {
String invoiceNumber = (String) rows.get(i).get("DOC_REFNUM");
fileName = ((String) rows.get(i).get("BI_REFERENCE")).trim();
billMedium = (String) rows.get(i).get("BI_MEDIUM_SHDES");
context.put("fileName", fileName);
context.put("DOC_REFNUM", invoiceNumber);
context.put("billMedium", billMedium);
map.put("Process"+i, context);
context = new ExecutionContext();
}
- 总共 30 个工作线程将并行启动(线程池执行器)
@Bean
@Qualifier("masterStep")
public Step masterStep() throws Exception {
return stepBuilderFactory.get("masterStep").partitioner("slaveStep", partitioner()).step(slaveStep())
.gridSize(30).taskExecutor(taskExecutor()).listener(new InvoiceStepListener()).build();
}
解决方案
我们已经通过以下流程解决了这个问题
- 目前我们正在表格中获取 XML 文件路径
- 我们不是根据网格/线程池核心大小划分成更大的块。
- 每个worker slave将获得分区文件并一一处理并再次提交块以增加额外的性能。
如果您正在使用任何其他更好的选择,请添加。
推荐阅读
- python - Pandas:计算 0.001 范围内的值,因此在 0 到 0.001 之间计数,然后在 0.001 和 0.002 之间计数,等等
- c# - 在剃刀中更改用户输入
- asp.net-core - 如何从 Startup 类中找到底层操作系统
- c# - 如何为需要用户进行身份验证的 Bot Framework v4 对话框编写单元测试?
- php - 教义部分选择加载整个对象
- html - 为什么包含 img 的 div 不会拉伸他父母的 div 高度
- sql - 为 sap hana 上的表列生成哈希列
- sql-server - DBCC SHRINKFILE 会杀死活动事务吗?
- jms - 使用 Wildfly 进行批处理/批量消息 (JMS) 处理
- objective-c - 为什么找不到 Swift 4 语言的 Xcode 目标 c 接口标头名称