springbatch使用记录
背景:并发抽取接口数据。通过ai生成后调试了老半天才能使,记录一下
主要是处理器Processor, 读取器Reader和写库用的Writer
使用了框架的Shell功能,挺强大的。如果要对接口读取的数据做过滤,可以增加执行参数,如:–skip-filter
- 这个参数我是用在Processor中的,因为要对已经获取的数据进行过滤。但其中要注意的点就是需要再处理器中获取这个参数
public class ExamReportItemProcessor implements ItemProcessor<ExamReportDto, ExamReportEntity> {@Autowiredprivate InpatientValidationService inpatientValidationService;private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");private boolean skipFilter = false;@BeforeSteppublic void beforeStep(StepExecution stepExecution) {JobParameters jobParameters = stepExecution.getJobParameters();String skipFilterStr = jobParameters.getString("skipFilter");this.skipFilter = "true".equalsIgnoreCase(skipFilterStr);}
还要注意:并发执行命令需要用到注解 @StepScope,否则会陷入分批次拉数据却只调用一次的尴尬, 调了许久
# 这是在BatchConfig.java中的配置
@Bean
@StepScopepublic ExamReportItemReader examReportItemReader() {return new ExamReportItemReader();}@Bean@StepScopepublic ExamReportItemProcessor examReportItemProcessor() {return new ExamReportItemProcessor();}