package pl.edu.icm.saos.batch.jobs; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.core.step.tasklet.TaskletStep; import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.transaction.interceptor.DefaultTransactionAttribute; import pl.edu.icm.saos.importer.common.JudgmentImportDownloadWriter; import pl.edu.icm.saos.importer.common.JudgmentImportProcessWriter; import pl.edu.icm.saos.importer.common.JudgmentWithCorrectionList; import pl.edu.icm.saos.importer.commoncourt.court.CcImportJobExecutionListener; import pl.edu.icm.saos.importer.commoncourt.court.CommonCourtImportProcessor; import pl.edu.icm.saos.importer.commoncourt.court.CommonCourtImportWriter; import pl.edu.icm.saos.importer.commoncourt.court.XmlCommonCourt; import pl.edu.icm.saos.importer.commoncourt.judgment.download.CcjImportDownloadProcessor; import pl.edu.icm.saos.importer.commoncourt.judgment.download.CcjImportDownloadReader; import pl.edu.icm.saos.importer.commoncourt.judgment.download.SourceCcJudgmentTextData; import pl.edu.icm.saos.importer.commoncourt.judgment.process.CcjImportProcessProcessor; import pl.edu.icm.saos.importer.commoncourt.judgment.process.CcjImportProcessSkipListener; import pl.edu.icm.saos.importer.commoncourt.judgment.process.CcjImportProcessSkipPolicy; import pl.edu.icm.saos.importer.notapi.common.JudgmentImportProcessReader; import pl.edu.icm.saos.persistence.model.CommonCourt; import pl.edu.icm.saos.persistence.model.CommonCourtJudgment; import pl.edu.icm.saos.persistence.model.importer.RawSourceCcJudgment; @Configuration public class CcjImportJobConfiguration { @Autowired private JobBuilderFactory jobs; @Autowired private StepBuilderFactory steps; //======== Common Court Judgment importer ======== // import download beans @Scope(value="step", proxyMode = ScopedProxyMode.TARGET_CLASS) @Bean public CcjImportDownloadReader ccjImportDownloadReader() { return new CcjImportDownloadReader(); } @Autowired private JudgmentImportDownloadWriter ccjImportDownloadWriter; @Autowired private CcjImportDownloadProcessor ccjImportDownloadProcessor; // import process beans @Autowired private JudgmentImportProcessReader<RawSourceCcJudgment> ccjImportProcessReader; @Autowired private CcjImportProcessProcessor ccjImportProcessProcessor; @Bean public JudgmentImportProcessWriter<CommonCourtJudgment> ccjImportProcessWriter() { return new JudgmentImportProcessWriter<>(); } @Autowired private CcjImportProcessSkipListener ccjImportProcessSkipListener; @Autowired private CcjImportProcessSkipPolicy ccjImportProcessSkipPolicy; @Bean public Job ccJudgmentImportJob() { return jobs.get("IMPORT_CC_JUDGMENTS").start(ccJudgmentImportDownloadStep()).next(ccJudgmentImportProcessStep()).incrementer(new RunIdIncrementer()).build(); } @Bean public Job ccJudgmentImportDownloadJob() { return jobs.get("IMPORT_CC_JUDGMENTS_download").start(ccJudgmentImportDownloadStep()).incrementer(new RunIdIncrementer()).build(); } @Bean public Job ccJudgmentImportProcessJob() { return jobs.get("IMPORT_CC_JUDGMENTS_process").start(ccJudgmentImportProcessStep()).incrementer(new RunIdIncrementer()).build(); } @Bean @Autowired protected Step ccJudgmentImportDownloadStep() { return steps.get("ccJudgmentImportDownloadStep").<SourceCcJudgmentTextData, RawSourceCcJudgment> chunk(20) .reader(ccjImportDownloadReader()) .processor(ccjImportDownloadProcessor) .writer(ccjImportDownloadWriter) .build(); } @Bean @Autowired protected Step ccJudgmentImportProcessStep() { TaskletStep step = steps.get("ccJudgmentImportProcessStep") .<RawSourceCcJudgment, JudgmentWithCorrectionList<CommonCourtJudgment>> chunk(20).faultTolerant() .skipPolicy(ccjImportProcessSkipPolicy).listener(ccjImportProcessSkipListener) .reader(ccjImportProcessReader) .processor(ccjImportProcessProcessor) .writer(ccjImportProcessWriter()) .transactionAttribute(new DefaultTransactionAttribute()) .build(); step.setTransactionAttribute(new DefaultTransactionAttribute()); return step; } //======== Common Court importer ======== @Autowired private CommonCourtImportProcessor ccImportProcessor; @Autowired private CommonCourtImportWriter ccImportWriter; @Autowired private StaxEventItemReader<XmlCommonCourt> ccImportReader; @Autowired private CcImportJobExecutionListener ccImportJobExecutionListener; @Bean public Job commonCourtImportJob() { return jobs.get("IMPORT_CC_COURTS").start(commonCourtImportProcessStep()).listener(ccImportJobExecutionListener).incrementer(new RunIdIncrementer()).build(); } @Bean @Autowired protected Step commonCourtImportProcessStep() { return steps.get("commonCourtImportStep").<XmlCommonCourt, CommonCourt> chunk(20) .reader(ccImportReader) .processor(ccImportProcessor) .writer(ccImportWriter) .build(); } }