2016-04-07 4 views
5

Ich habe einen Spring-Boot-Batch, der mit einer MongoDB-Datenbank arbeitet, um eine MySQL-Datenbank zu versorgen. Ich habe etwa die Hälfte meiner Datenbank von dem Programm verarbeitet, aber nur etwa 200 Fehler in meinen Protokollen.Nur die Hälfte der MongoDB-Datenbank wird im Spring-Batch verarbeitet

Die BATCH_STEP_EXECUTION Tabelle ließ mich wissen, dass der Prozess gut lief (Status abgeschlossen) und eine READ_COUNT von 5692 anzeigen, obwohl ich 11800 Dokumente in der Datenbank habe.

Habe ich etwas in der Konfiguration vergessen, um zu verhindern, dass nicht die gesamte Datenbank durchlaufen wird?

Hier ist meine Konfigurationsklasse:

@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

Ich habe versucht, die fehlgeschlagenen Parameter zu meinem Schritt ohne Erfolg hinzufügen – Labe

+0

Nur ein Gedanke, aber haben Sie eine geschickte Bereitstellung von Mogodb? –

+0

Hola! Ich habe einige Fragen zu dem, was du tust: 1) Du sagst, dass du MySQL mit Daten aus einer Mongo-Sammlung fütterst. Denkst du, dass ein Fehler mit bestimmten Daten das Programm zum Absturz bringt? 2) Was sind diese 200 Fehler? –

Antwort

1

OK so löste ich es heute durch einen leeren POJO anstelle von null in meinem Konverter zurückkehrt, wenn etwas mit den Daten falsch ist. Dann überspringe ich es einfach im Prozessor.

Es ist irgendwie komisch, dass es nicht auf der ersten Null aufgehört, obwohl. Vielleicht eine Parallelisierung der Chunk-Elemente ließ mich die Protokolle falsch lesen