首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Springbatch -如何使用Chunking或类似工具拆分工作

Springbatch -如何使用Chunking或类似工具拆分工作
EN

Stack Overflow用户
提问于 2020-08-28 07:24:54
回答 1查看 46关注 0票数 0

我有一个问题,那就是如何最好地根据我的需求来实现一个springbatch分块实现。目前,我有一份从数据库中读出集合的工作。此集合实质上将数据分组映射到检索信息。有点像:

代码语言:javascript
复制
GROUPING    RETRIEVAL INSTRUCTIONS
GRP-01      <instructions for group 01>
GRP-02      <instructions for group 02>
..
..
GRP-N       <instructions for group N>

目前我有一些类似于下面的东西(为了清楚起见,一些细节被省略了);

代码语言:javascript
复制
public class BatchConfig {

.
.

@Bean
public ItemReader<CollectionDto> databaseCursorItemReader(DataSource dataSource) {
    return new JdbcCursorItemReaderBuilder<CollectionDto>()
            .name("cursorItemReader")
        .dataSource(dataSource)
        .sql(GET_DATA)
        .rowMapper(new BeanPropertyRowMapper<>(CollectionDto.class))
            .build();
}

@Bean
ItemProcessor<CollectionDto, CollectionDto> databaseXmlItemProcessor() {
    return new QueryLoggingProcessor();
}

@Bean
public ItemWriter<CollectionDto> databaseCursorItemWriter() {
    return new GroupingWriter();
} 

.
.

}

public class GroupingWriter implements ItemWriter<CollectionDto> {

@Override
public void write(List<? CollectionDto> list) {

for(CollectionDto group : list) {

   <processing here one group at a time>

}

我遇到的问题是我所接触的系统的性质使得这个过程太慢了。因此,我想通过分块来拆分工作(目前在上面的GroupingWriter中执行),这样我就可以并行处理每一组。我试图找出一种方法,在单独的步骤中使用分块来完成这个分组过程,但我不知道如何将集合中的每一项分配到单独的块中。如果您有任何想法,我将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-28 09:52:55

下面是我的面向块处理的Spring批处理配置:

代码语言:javascript
复制
@Bean
public Job myJob() {
    return jobBuilders.get("myJob")
        .start(chunkStep())
        .build();
}

@Bean
public Step chunkStep() {
    return stepBuilderFactory.get("my_step")
            .<InputData, OutputData>chunk(20).faultTolerant()
             .reader(databaseCursorItemReader())
            .processor(processor())
            .writer(databaseCursorItemWriter())
            .build();
}

在面向块的处理中,每个单独的项都从ItemReader中读入,传递给ItemProcessor,然后聚合。一旦读取的项数等于提交间隔(即上面示例中的20 ),整个块就会通过ItemWriter写出,然后提交事务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63625412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档