【发布时间】:2016-07-28 22:36:35
【问题描述】:
我有一个使用 MongoDB 数据库为 MySQL 数据库提供数据的 Spring Boot 批处理。 该程序正在处理我大约一半的数据库,但我的日志中只有大约 200 个错误。
BATCH_STEP_EXECUTION 表让我知道过程进展顺利(状态已完成)并显示 READ_COUNT 为 5692,尽管我在数据库中有 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();
}
}
【问题讨论】:
-
我尝试将 faultTolerant 参数添加到我的步骤中,但没有成功
-
只是一个想法,但是你有 mogodb 的分片部署吗?
-
你好!我对您在做什么有一些疑问:1)您说您正在向 MySQL 提供来自 mongo 集合的数据,您是否认为特定数据的失败会导致程序崩溃? 2) 那 200 个错误是什么?
-
@PeterBrittain 我不这么认为,我使用默认安装但我会检查
-
@HéctorValverdePareja 程序不会崩溃:批处理的 BATCH_STEP_EXECUTION 显示状态为 COMPLETED,只有 5k 读取。这些错误是可以接受的,例如缺少字段、列表中的元素太少等...
标签: java mysql mongodb spring-boot spring-batch