Мне нужна серьезная помощь, пожалуйста, я застрял на 3 дня в той же проблеме, мне нужно написать пакетную программу Spring, которая читает несколько файлов csv и копирует их содержимое в выходной файл. Моя пакетная конфигурация синтаксически верна, и я запускаю приложение без ошибок, но не вижу элементов, отображаемых в консоли !! чувствую, что файлы там даже не красные! У меня есть два писателя: один для записи в консоли, а другой для записи в файл dest, но ни один из них не проснулся !! Не думаю, что файлы даже красные! вот мой класс batchConfig:
@Component
@Configuration
@EnableBatchProcessing
public class batchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
// @Value(value="Fichiers-eclates/fichier-eclate-*.csv")
// private Resource[] inputResources;
// @Value("#{jobParameters['FichierEclate']}") Resource[] inputFile;
@Value("file:/Fichiers-eclates/*.csv") Resource[] inputFile;
// @Value("#{jobParameters['FichierRegrouppe']}") Resource outputFile;
@Bean
public ConsoleItemWriter<FichierEclate> writerConsole()
{
return new ConsoleItemWriter<FichierEclate>();
}
public FlatFileItemWriter<FichierEclate> writer()
{
FlatFileItemWriter<FichierEclate> writer = new FlatFileItemWriter<>();
writer.setResource(new ClassPathResource("Fichiers-regrouppes/outputData.csv"));
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<FichierEclate>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<FichierEclate>() {
{
setNames(new String[] { "AffaireID","CodeClasse","CodeAppli","NBcompte","NBlot" });
}
});
}
});
return writer;
}
@Bean
public Job readCSVFilesJob() {
return jobBuilderFactory
.get("readCSVFilesJob")
.incrementer(new RunIdIncrementer())
.start(step1())
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<FichierEclate, FichierEclate>chunk(100)
.reader(multiResourceItemReader())
.writer(writerConsole())
.build();
}
@Primary
@Bean
public MultiResourceItemReader<FichierEclate> multiResourceItemReader()
{
MultiResourceItemReader<FichierEclate> resourceItemReader = new MultiResourceItemReader<FichierEclate>();
resourceItemReader.setResources(inputFile);
resourceItemReader.setDelegate(reader());
return resourceItemReader;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public FlatFileItemReader<FichierEclate> reader()
{
FlatFileItemReader<FichierEclate> reader = new FlatFileItemReader<FichierEclate>();
reader.setLinesToSkip(1);
reader.setLineMapper(new DefaultLineMapper() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "AffaireID","CodeClasse","CodeAppli","NBcompte","NBlot" });
}
});
setFieldSetMapper(new BeanWrapperFieldSetMapper<FichierEclate>() {
{
setTargetType(FichierEclate.class);
}
});
}
});
return reader;
}
@Bean
public JobParametersValidator defaultJobParametersValidator() {
DefaultJobParametersValidator bean = new DefaultJobParametersValidator();
bean.setRequiredKeys(new String[] { "FichierEclate" });
bean.setOptionalKeys(new String[] { "run.id" });
return bean;
}
@Bean
public JobParametersValidator myJobParametersValidator() {
return new MyJobParametersValidator();
}
}
вот еще один класс для consoleWriter:
import java.util.List;
import org.springframework.batch.item.ItemWriter;
public class ConsoleItemWriter<T> implements ItemWriter<T> {
@Override
public void write(List<? extends T> items) throws Exception {
for (T item : items) {
System.out.println(item);
}
}
}
Теперь мои вопросы:
1 / папка, содержащая несколько файлов, которые должны быть красными, находится снаружи, поэтому я хочу передать путь к папке в качестве переменной среды в «Выполнить конфигурации» в Eclipse. Мне это понадобится в производстве позже. Затем я вызываю эту переменную среды в flatefileItemReader или MultiresourceReader, не уверен, мне нужно, чтобы вы сказали мне, какой из них и как, пожалуйста?
2 / выходной файл, который будет содержать содержимое всех входных файлов, должен быть автоматически создан в определенной папке. этот путь к папке также следует передать как переменную среды и вызвать позже в FlatFileitemWriter.
3 / Почему я не вижу элементов, отображаемых в консоли, хотя у меня нет ошибок? если из-за того, что файлы не красные, скажите, как решить вопрос «1».
Как я могу решить эту проблему? !!