我有一个弹簧批处理过程,应该执行以下操作:
我读取了多个这样命名的文件:
法国.123456
比利时.569834
法国.896471
英国.128956
英国.789632
比利时.896321
德国.678900 ...等
所以我必须将所有法国文件内容写入一个名为“france”的文件中,将所有德国文件内容写入一个名为“germany”的文件中......等等 因此,将常见的国家/地区文件合二为一。
这是我的批处理配置类,它读取所有文件并一次只生成一个包含所有内容的文件。哪个不是必需的!!
@Component
@Configuration
@EnableBatchProcessing
public class batchConfig {
private FichierEclate FE =new FichierEclate();
private String[] fileName;
@Value("input/*")
private Resource[] inputResources;
private String[] Item=new String[100];
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public FlatFileItemReader<content> reader() {
FlatFileItemReader<content> fileItemReader= new FlatFileItemReader<>();
fileItemReader.setName("FFIR1");
//fileItemReader.setLinesToSkip(1);
//fileItemReader.setResource(new ClassPathResource("fichier-eclate-1.csv"));
fileItemReader.setLineMapper(lineMappe());
return fileItemReader ;
}
@Bean
public MultiResourceItemReader<content> multiFileReader() {
MultiResourceItemReader<content> multiFileItemReader= new MultiResourceItemReader<>();
multiFileItemReader.setResources(inputResources);
multiFileItemReader.setName("aaa");
multiFileItemReader.setDelegate(reader());
return multiFileItemReader ;
}
@Bean
public FlatFileItemWriter<content> writer()
{ FlatFileItemWriter<content> writer = new FlatFileItemWriter<>();
writer.setResource(new FileSystemResource("output.csv"));
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<content>() {
{ //setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<content>() {
{ //setNames(new String[] { "AffaireID","CodeClasse","CodeAppli","NBcompte","NBlot" });
setNames(new String[] {"FileContent"});
} });}});
writer.setAppendAllowed(true); // pour ajouter du contenu à la fin du fichier au lieu d'écraser l'ancien contenu à chaque fois
return writer; }
@Bean
public LineMapper<content> lineMappe(){
DefaultLineMapper<content> lineMapper= new DefaultLineMapper<>();
DelimitedLineTokenizer lineTokenizer=new DelimitedLineTokenizer();
//lineTokenizer.setDelimiter(",");
lineTokenizer.setStrict(false);
lineTokenizer.setNames("FileContent");
lineMapper.setLineTokenizer(lineTokenizer);
BeanWrapperFieldSetMapper fieldSetMapper=new BeanWrapperFieldSetMapper();
fieldSetMapper.setTargetType(content.class);
lineMapper.setFieldSetMapper(fieldSetMapper);
return lineMapper; }
@Bean
public Job readCSVFilesJob(Step step1) {
return jobBuilderFactory
.get("readCSVFilesJob")
.incrementer(new RunIdIncrementer())
.start(step1)
.build(); }
@Bean
public Step step1(FlatFileItemWriter<content> writer) {
return stepBuilderFactory.get("step1").<content, content>chunk(2)
.reader(multiFileReader())
.writer(writer)
.build();}}
如何在我的处理器中添加这个条件? 谢谢,