Spring Boot Rest API + Spring Batch

Raf*_*ues 5 spring spring-batch spring-boot

我正在研究 Spring Batch 过程,但我的文档没有阐明流程。

我有一个 API,它接收一个具有固定位置的平面文件。该文件具有页眉、正文和页脚特定布局。

我想创建一个具有一个页眉、一个详细信息列表和一个页脚类的文件类。

我现在所知道的是,我必须使用一个令牌来识别每个页眉、详细信息和页脚的位置,但我发现的有关 Spring 批处理的所有内容都没有显示如何执行此操作并从 API 请求启动该过程。

Val*_* K. 2

您必须使用 JobbuilderFactory 构建作业:

    @Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    public SomeReader<Some> reader() {

        // some reader configuration
        return reader;
    }

    @Bean
    public SomeProcessor processor() {
        return new SomeProcessor();
    }

    @Bean
    public SomeWriter<Person> writer() {
        // some config
        return writer;
    }

    @Bean
    public Job someJob() {
        return jobBuilderFactory.get("someJob")
                .flow(step1())
                .end()
                .build();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .<Some, Some> chunk(10)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .build();
    }
    }
Run Code Online (Sandbox Code Playgroud)

在休息控制器中启动作业:

@RestController
@AllArgsConstructor
@Slf4j
public class BatchStartController {

    JobLauncher jobLauncher;

    Job job;

    @GetMapping("/job")
    public void startJob() {
    //some parameters
        Map<String, JobParameter> parameters = new HashMap<>();
        JobExecution jobExecution = jobLauncher.run(job, new JobParameters(parameters));
        }    }
Run Code Online (Sandbox Code Playgroud)

还有一个重要的细节 - 在 application.properties 中添加:

spring.batch.job.enabled=false
Run Code Online (Sandbox Code Playgroud)

以防止作业自行启动。