微服务项目中Spring Batch Reader操作

问题描述 投票:0回答:1

我用的是弹簧批。我的项目是用微服务架构编写的。我正在使用假客户端在 Reader 中拍摄数据。 当我使用 feign 客户端提取所有数据时,java 堆会膨胀。针对这种情况我应该采用什么样的方法。如果我进行分页,如何保持数据的一致性?针对这种情况应该创建什么样的解决方案。

Spring批处理核心版本:4.3.7

    @StepScope
    @Bean(name = "paymentReader")
    public ListItemReader<PaymentDto> reader() {
        ServiceResponse<List<PaymentDto>> result = paymentClient.getPaymentList();
        return new ListItemReader<>(result.getData());
    }

    private Step createStepFirst(ItemWriter<PaymentDto> createWriter, ItemProcessor<PaymentDto, PaymentDto> itemProcessor, ListItemReader<PaymentDto> reader) {
        return stepBuilderFactory.get(StepName.STEPFIRST)
                .<PaymentDto, PaymentDto>chunk(100)
                .reader(reader)
                .processor(itemProcessor)
                .writer(createWriter).build();
    }
spring-boot spring-batch
1个回答
0
投票

我继续扩展 AbstractPagingItemReader 类。

public class FeignClientPagingReader extends AbstractPagingItemReader<PaymentDto> {

    private final FeignClientService feignClientService;

    public FeignClientPagingReader(FeignClientService feignClientService, int pageSize) {
        this.feignClientService = feignClientService;
        this.setPageSize(pageSize);
    }

    @Override
    protected void doReadPage() {
        List<PaymentDto> paymentDtoList = feignClientService.findPaymentList(
                this.getPage(), this.getPageSize()
        );
        this.results = paymentDtoList;
    }

    @Override
    protected void doJumpToPage(int itemIndex) {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.