2016-04-07 16 views
5

Tôi có một lô khởi động mùa xuân làm việc với một cơ sở dữ liệu MongoDB để nạp một cơ sở dữ liệu MySQL. Tôi có khoảng một nửa cơ sở dữ liệu của mình đang được chương trình xử lý nhưng chỉ có 200 lỗi trong nhật ký của tôi.Chỉ một nửa cơ sở dữ liệu MongoDB đang được xử lý trong lô Xuân

Bảng BATCH_STEP_EXECUTION cho tôi biết rằng quy trình đã hoạt động tốt (trạng thái đã hoàn thành) và hiển thị READ_COUNT trong số 5692 mặc dù tôi có 11800 tài liệu trong cơ sở dữ liệu.

Tôi đã quên điều gì đó trong cấu hình để ngăn không đi qua toàn bộ cơ sở dữ liệu?

Đây là lớp cấu hình của tôi:

@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(); 
    } 
} 
+0

Tôi đã cố gắng để thêm param lỗiTolerant bước của tôi mà không có bất kỳ thành công – Labe

+0

Chỉ cần một ý nghĩ, nhưng bạn có một triển khai sharded của mogodb? –

+0

Hola! Tôi có một số câu hỏi về những gì bạn đang làm: 1) Bạn nói rằng bạn đang ăn MySQL với dữ liệu từ một bộ sưu tập mongo, bạn có nghĩ rằng một thất bại với một dữ liệu cụ thể của tôi sụp đổ chương trình? 2) 200 lỗi đó là gì? –

Trả lời

1

OK vì vậy tôi giải quyết nó ngay hôm nay bằng cách quay một POJO rỗng thay vì null trong chuyển đổi của tôi khi cái gì là sai với dữ liệu. Sau đó, tôi chỉ cần bỏ qua nó trong bộ vi xử lý.

Thật kỳ lạ là nó không dừng lại trên lần gặp đầu tiên. Có lẽ một số parallelisation của các yếu tố đoạn đã làm cho tôi đọc các bản ghi sai

Các vấn đề liên quan