在读取(通过 RepositoryItemReader)并在同一个表中写入时,读者在春季批次中跳过了某些项目?

2023-12-23

我有一个 Spring Batch 应用程序,可以读取和写入同一个表。由于我的数据量非常大,因此我使用分页来读取表中的项目。当我将块大小设置为大于 1 时,我的分页编号会错误更新,因此无法从表中读取某些项目。任何想法?

@Bean
    @StepScope
    public RepositoryItemReader<DedWorkFlowResponse> dedWorkFlowResponseItemReader() {

        return new RepositoryItemReaderBuilder<DedWorkFlowResponse>()
                .name("dedWorkFlowResponseItemReader")
                .methodName("findByPickedIs")
                .arguments(Collections.singletonList(false))
                .pageSize(100)
                .repository(dedWorkFlowResponseRepository)
                .sorts(Collections.singletonMap("id", Sort.Direction.ASC))
                .build();
    }


public interface DedWorkFlowResponseRepository extends JpaRepository<DedWorkFlowResponse, Long> {
    public Page<DedWorkFlowResponse> findByPickedIs(boolean picked,Pageable pageable);
}


@Component
public class Writer implements ItemWriter<DedWorkFlowResponse> {

    @Autowired
    ResponseRepository responseRepository;

    @Autowired
    DedWorkFlowResponseRepository dedWorkFlowResponseRepository;


    @Override
    public void write(List<? extends DedWorkFlowResponse> list) throws Exception {
        List<Response> responses = new ArrayList<>();

        list.stream().forEach(dedWorkFlowResponse ->{

            Response response = new Response();
            response.setName(dedWorkFlowResponse.getName());
            response.setProcessedDate(new Date(System.currentTimeMillis()));

            System.out.println(response.toString());
            responses.add(response);

            dedWorkFlowResponse.setPicked(true);
            dedWorkFlowResponseRepository.saveAndFlush(dedWorkFlowResponse);
        } );

        responseRepository.saveAll(responses);
    }
}

在作家中,我正在更新一些值DedWorkFlowResponse Table


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在读取(通过 RepositoryItemReader)并在同一个表中写入时,读者在春季批次中跳过了某些项目? 的相关文章

随机推荐