我用的是弹簧批。我的项目是用微服务架构编写的。我正在使用假客户端在 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();
}
我继续扩展 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) {
}
}