spring-boot - Spring Batch Partition Slave JDBCItemWriter StepScope 或 Default Bean Scope
问题描述
请告知 Spring 批处理分区 Slave " JdbcBatchItemWriter
" 范围。目前我们已经定义为具有 30 个分区的默认 Bean 范围。根据文档说JdbcBatchItemWriter
是线程安全的。请注意我们的阅读器是“STEPSCOPE”
下面的代码片段供作者使用
@Bean
public JdbcBatchItemWriter<UnifiedInvoiceDTO> summaryWriter() {
JdbcBatchItemWriter<UnifiedInvoiceDTO> databaseItemWriter = new JdbcBatchItemWriter<>();
databaseItemWriter.setDataSource(dataSource);
databaseItemWriter.setSql(BSCSUtils.QUERY_INSERT_UBI_SUMMARY);
ItemPreparedStatementSetter<UnifiedInvoiceDTO> invoicePreparedStatementSetter = new InvoiceSummarySetter();
databaseItemWriter.setItemPreparedStatementSetter(invoicePreparedStatementSetter);
return databaseItemWriter;
}
下面是复合编写器的代码片段,因为我们有多个表
@Bean
public CompositeItemWriter compositeWriter() throws Exception {
CompositeItemWriter compositeItemWriter = new CompositeItemWriter();
List<ItemWriter> writers = new ArrayList<ItemWriter>();
logger.info("Composite Writer Started");
writers.add(summaryWriter());
writers.add(detailsWriter());
writers.add(chartWriter());
compositeItemWriter.setDelegates(writers);
return compositeItemWriter;
}
我们的问题
- 我们是否需要制作复合编写器和
JDBCwriter
“StepScope”以避免任何并发问题。根据文档说JdbcBatchItemWriter
是线程安全的。 - 由于默认的 Bean 范围,我们在插入(批量提交)时是否有任何延迟。
请指教
解决方案
- 如果编写器被记录为线程安全的,那么您可以在多线程步骤中使用它。我会用自己的读取器/写入器实例配置每个工作步骤,以确保没有并发问题。
- 我看不出两者之间的关系。分区的想法是工人并行执行,因此您将拥有并行事务。现在,在多个并行事务中使用共享写入器与使用多个写入器是您需要进行试验和基准测试的事情。
推荐阅读
- java - 如何在Java中对键上的地图列表进行排序?
- abap - 如何在 SAP ABAP 类中知道当前浏览器的 URL
- mysql - Mysql-Workbench 表浏览器窗格丢失
- python-2.7 - 从其他目录调用 python 脚本函数
- java - 如何将mongodb视图与pageable和querydsl结合起来?
- sql - SQL 将行转换为列并填充值
- java - setOnClickListener Android Studio(制作计数器)
- javascript - 通过代理的 Google Places API 超时
- cypress - 比较赛普拉斯中的动态文本
- reactjs - 在反应图中具有相同x轴的多个y轴值