Чтение нескольких файлов и процессов в одном объекте и запись в файл SpringBoot + Spring Batch - PullRequest
0 голосов
/ 05 февраля 2020

Я использую пакет Spring с пружинной загрузкой. Я сталкиваюсь с проблемами при чтении нескольких файлов одновременно, чтобы обработать все данные файла как единый объект. У меня есть производственные требования, пожалуйста, помогите полностью заполнить эти требования.

Sourcefile1.txt:

1001    Tom Moody            29/7/2013
1002    John Parker          30/7/2013
1003    Henry Williams       31/7/2013

Sourcefile2.txt:

1       1001    ACCOUNTING        
2       1002    RESEARCH         
3       1003    SALES

Окончательный файл выглядит так: Файл назначения.txt

1       1001    Tom Moody         ACCOUNTING    29/7/2013    
2       1002    John Parker       RESEARCH      30/7/2013   
3       1003    Henry Williams    SALES         31/7/2013

Я хочу обработать эти файлы, используя пакет весенней загрузки. Как добиться окончательного вывода файла. Пожалуйста, помогите Спасибо

java Конфигурация:

@Configuration
@EnableBatchProcessing
public class BatchConfigurationParallel {

    Logger logger = LoggerFactory.getLogger(BatchConfigurationParallel.class);

    @Autowired
    JobBuilderFactory jobBuilderFactory;

    @Autowired
    StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job parallelStepsJob() {

        Flow masterFlow = new FlowBuilder<Flow>("masterFlow").start(taskletStep("step1")).build();

        Flow flowJob1 = new FlowBuilder<Flow>("flow1").start(taskletStep("step2")).build();
        Flow flowJob2 = new FlowBuilder<Flow>("flow2").start(taskletStep("step3")).build();
        Flow flowJob3 = new FlowBuilder<Flow>("flow3").start(taskletStep("step4")).build();

        Flow slaveFlow = new FlowBuilder<Flow>("splitflow").split(new SimpleAsyncTaskExecutor())
                .add(flowJob1, flowJob2, flowJob3).build();

        return (jobBuilderFactory.get("parallelFlowJob").incrementer(new RunIdIncrementer()).start(masterFlow)
                .next(slaveFlow).build()).build();

    }

    private TaskletStep taskletStep(String step) {
        return stepBuilderFactory.get(step).tasklet((contribution, chunkContext) -> {
            // IntStream.range(1, 100).forEach(token -> logger.info("Step:" + step + "
            // token:" + token));
            return RepeatStatus.FINISHED;
        }).build();

    }

    @Bean
    public Job partitioningJob() throws Exception {
        return jobBuilderFactory.get("parallelJob")
                 .incrementer(new RunIdIncrementer())
                .flow(masterStep()).end().build();
    }

    @Bean
    public Step masterStep() throws Exception {
        return stepBuilderFactory.get("masterStep").partitioner(slaveStep()).partitioner("partition", partitioner())
                 .gridSize(1)
                .taskExecutor(new SimpleAsyncTaskExecutor()).build();
    }

    @Bean
    public Partitioner partitioner() throws Exception {
        MultiResourcePartitioner partitioner = new MultiResourcePartitioner();
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        partitioner.setResources(resolver.getResources("/hourly/*.txt"));
        return partitioner;

    }

    @Bean
    public Step slaveStep() throws Exception {
        return stepBuilderFactory.get("slaveStep")
                .<CaseWraper, CaseWraper>chunk(1)
                .reader(reader(null))
                .processor(processor())
                .writer(writer()).build();
    }

    @Bean
    public ItemProcessor<CaseWraper, CaseWraper> processor() {
        return new CutomItemProcessor();
    }

    @Bean(name = "reader")
    @StepScope
    public FlatFileItemReader<CaseWraper> reader(@Value("#{stepExecutionContext['fileName']}") String file)
            throws Exception {

        FlatFileItemReader<CaseWraper> reader = new FlatFileItemReader<>();
        reader.setResource(new UrlResource(file));
        System.out.println("file name : " + file);

        File filePath = new File(file);

        DefaultLineMapper<CaseWraper> lineMapper = new DefaultLineMapper<>();
        FixedLengthTokenizer tokenizer = new FixedLengthTokenizer();

        tokenizer.setStrict(false);
        String[] columnNames = { "id", "name", "department", "date" };

            tokenizer.setNames(columnNames);
            tokenizer.setColumns(new Range(1, 4), new Range(6, 10), new Range(10, 15));
            AccountSummaryMapper<Case> accountSummaryMapper = new AccountSummaryMapper<Case>();
            accountSummaryMapper.setT(new Case());
            lineMapper.setFieldSetMapper(accountSummaryMapper);

        lineMapper.setLineTokenizer(tokenizer);
        reader.setLineMapper(lineMapper);

        return reader;
    }



    @Bean
    public ItemWriter<CaseWraper> writer() {

        return (items) -> items.forEach(item -> {

            Case _cases = item.get_case();

            AccountSummary accountSummary = item.getAccount();

            String data = _cases != null ? _cases.getAcctNo()
                    : "" + " " + accountSummary != null ? accountSummary.getAccountReferenceXid() : "";
            logger.info(data);

        });

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...