2016-04-07 16 views
5

Ho un batch di avvio di primavera che funziona con un database MongoDB per alimentare un database MySQL. Ho circa la metà del mio database elaborato dal programma ma solo qualcosa come 200 errori nei miei registri.Solo metà del database MongoDB viene elaborato nel batch di primavera

La tabella BATCH_STEP_EXECUTION mi consente di sapere che il processo è andato a buon fine (stato completato) e di visualizzare un numero READ_COUNT di 5692 sebbene disponga di 11800 documenti nel database.

Ho dimenticato qualcosa nella configurazione per impedire di non passare attraverso l'intero database?

Qui è la mia classe di configurazione:

@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

Ho provato ad aggiungere il parametro faultTolerant al mio passaggio senza alcun successo – Labe

+0

Solo un pensiero, ma hai una distribuzione più complessa di mogodb? –

+0

Hola! Ho alcune domande su cosa stai facendo: 1) Dici che stai dando da mangiare a MySQL con i dati di una collezione di mongo, pensi che un errore con un dato particolare mi faccia bloccare il programma? 2) Quali sono questi 200 errori? –

risposta

1

OK così ho risolto oggi restituendo un POJO vuota invece di null nel mio convertitore quando qualcosa non va con i dati. Quindi lo salterò nel processore.

È piuttosto strano che non si fermi sul primo null rilevato. Forse qualche parallelizzazione degli elementi del blocco mi ha fatto leggere i log errati

Problemi correlati