1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
| @Slf4j
@Configuration
@EnableBatchProcessing
@ComponentScan({
"fr.payet.flad.batch",
"fr.payet.flad.batch.tasklet"
})
public class BatchConfig {
@Autowired
private StepBuilderFactory steps;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private DemoTasklet demoTasklet;
@Bean
public ResourcelessTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
@Bean
public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) {
MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
try {
return mapJobRepositoryFactoryBean.getObject();
} catch (Exception ex) {
log.error("Exception : {}", ex.getMessage(), ex);
return null;
}
}
@Bean
@StepScope
public FlatFileItemReader<Balance> csvAnimeReader() {
FlatFileItemReader<Balance> reader = new FlatFileItemReader<>();
DefaultLineMapper lineMapper = new DefaultLineMapper();
FieldSetMapper fieldSetMapper = new BalanceFieldSetMapper();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[]{
"EXER",
"IDENT",
"NDEPT",
"LBUDG",
"INSEE",
"SIREN",
"CREGI",
"NOMEN",
"CTYPE",
"CSTYP",
"CACTI",
"FINESS",
"SECTEUR",
"CBUDG",
"CODBUD1",
"COMPTE ",
"BEDEB",
"BECRE",
"OBNETDEB",
"OBNETCRE",
"ONBDEB",
"ONBCRE",
"OOBDEB",
"OOBCRE",
"SD",
"SC"
});
tokenizer.setDelimiter(";");
lineMapper.setLineTokenizer(tokenizer);
lineMapper.setFieldSetMapper(fieldSetMapper);
reader.setLineMapper(lineMapper);
reader.setResource(new ClassPathResource("Balance_Commune_2016.csv"));
reader.setLinesToSkip(1);
return reader;
}
@Bean
public ItemProcessor<Balance, Balance> CsvFileProcessor() {
return new BalanceProcessor();
}
@Bean
public BalanceWriter balanceWriter() {
return new BalanceWriter();
}
@Bean
@StepScope
public MultiResourcePartitioner partitioner() {
MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
try {
Resource[] resources = resolver.getResources("Balance_Commune_2016.csv");
partitioner.setResources(resources);
partitioner.partition(1000);
return partitioner;
} catch (IOException e) {
log.error("IO Exception : {}", e.getMessage(), e);
}
return null;
}
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setMaxPoolSize(50);
taskExecutor.setCorePoolSize(20);
taskExecutor.setQueueCapacity(50);
taskExecutor.afterPropertiesSet();
return taskExecutor;
}
@Bean
@Qualifier("masterStep")
public Step masterStep() {
return steps.get("masterStep")
.partitioner(step1())
.partitioner("step1", partitioner())
.taskExecutor(taskExecutor())
.build();
}
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
simpleJobLauncher.setJobRepository(jobRepository);
return simpleJobLauncher;
}
@Bean
public Step step1() {
return steps.get("step1")
.<Balance, Balance>chunk(1)
.reader(csvAnimeReader())
.writer(balanceWriter())
.build();
}
@Bean
public Step step2() {
return steps.get("step2")
.tasklet(demoTasklet)
.build();
}
@Bean
public Job readCsvJob() {
return jobBuilderFactory.get("readCsvJob")
.incrementer(new RunIdIncrementer())
.flow(masterStep())
.next(step1())
.next(step2())
.end()
.build();
}
} |
Partager