我有一个弹簧引导批处理与一个MongoDB数据库一起工作,以输入一个MySQL数据库。我有大约一半的数据库正在由程序处理,但只有大约200个错误在我的日志中。
BATCH_STEP_EXECUTION表让我知道处理进行得很顺利(状态已完成),并显示了一个5692的READ_COUNT,尽管我在数据库中有11800个文档。
我是否忘记了配置中的某些内容,以防止未通过整个数据库?
下面是我的配置类:
@Configuration
@EnableBatchProcessing
@Import(PersistenceConfig.class)
public class BatchConfiguration {
@Autowired
MongoTemplate mongoTemplate;
@Autowired
SessionFactory sessionFactory;
@Bean
@StepScope
public ItemReader<CourseData> reader() {
MongoItemReader<CourseData> mongoItemReader = new MongoItemReader<>();
mongoItemReader.setTemplate(mongoTemplate);
mongoItemReader.setCollection("foo");
mongoItemReader.setQuery("{}");
mongoItemReader.setTargetType(CourseData.class);
Map<String, Sort.Direction> sort = new HashMap<>();
sort.put("_id", Sort.Direction.ASC);
mongoItemReader.setSort(sort);
return mongoItemReader;
}
@Bean
public ItemProcessor<CourseData, MatrixOne> processor() {
return new CourseDataMatrixOneProcessor();
}
@Bean
public ItemWriter<MatrixOne> writer() {
HibernateItemWriter writer = new HibernateItemWriter();
writer.setSessionFactory(sessionFactory);
System.out.println("writing stuff");
return writer;
}
@Bean
public Job importUserJob(JobBuilderFactory jobs, Step s1) {
return jobs.get("importRawCourseJob")
.incrementer(new RunIdIncrementer())
.flow(s1)
.end()
.build();
}
@Bean
@Transactional
public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<CourseData> reader, ItemWriter<MatrixOne> writer, ItemProcessor<CourseData, MatrixOne> processor) {
return stepBuilderFactory.get("step1")
.<CourseData, MatrixOne>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
}发布于 2016-04-17 16:03:34
好的,我今天解决了这个问题,当数据出现问题时,在转换器中返回一个空POJO而不是null。然后我就跳过处理器了。
但是,在遇到第一个null时,它并没有停止,这有点奇怪。也许是块元素的并行化让我看错了日志。
https://stackoverflow.com/questions/36486468
复制相似问题