首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于作业参数配置小枝批写入器

基于作业参数配置小枝批写入器
EN

Stack Overflow用户
提问于 2018-02-26 22:30:48
回答 1查看 695关注 0票数 1

我使用spring引导创建了一个简单的spring批处理作业,它从数据库读取并写入主题。我还有一个钩子,可以在开发过程中注释掉topicWriter并写入csv文件。这两种方法都是通过注释一个输出和运行另一个作者来完成的。(topicWriter或作者)企业现在想要能够管理临时、专题或作家。因此,我选择传递一个包含主题或csv的输出参数。看上去我可以用一个决定器,但这可能是错的。正如下面的代码所显示的那样,代码会抱怨重复的步骤,并且当我试图运行时正在循环。我无法知道如何在没有开始步骤的情况下运行,所以我创建了一个do nothing,因为作业需要在决定器之前先开始一步。所以我想我搞砸了。对解决方案或方向有什么想法吗?

代码语言:javascript
复制
   @Bean
public Job job(@Qualifier("step") Step step) {
    return jobBuilderFactory.get(BatchConstants.JOB_NAME).listener(jobListener())
            .start(step).next(decider()).on("COMPLETED").to(step1(null,null)).from(decider()).on("FAILED").to(step2(null,null)).end().build();
}


  @Bean
protected Step step() {
    return stepBuilderFactory.get("step")
            .tasklet(new Tasklet() {
                public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
                    return RepeatStatus.FINISHED;

                }
            })
            .build();
}

@Bean
protected Step step1(ItemReader<someDto> reader,
                    ItemWriter<someDto> topicWriter) {
    return stepBuilderFactory.get(BatchConstants.STEP_NAME)
            .<someDto, someDto> chunk(BatchConstants.CHUNKSIZE)
            .reader(reader)
            .writer(topicWriter) // write to kafka topic.
            .build();
}


@Bean
protected Step step2(ItemReader<someDto> reader,
                    ItemWriter<someDto> writer) {
    return stepBuilderFactory.get(BatchConstants.STEP_NAME)
            .<someDto, someDto> chunk(BatchConstants.CHUNKSIZE)
            .reader(reader)
            .writer(writer) // writes to csv
            .build();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-27 01:15:33

在Singel步骤中,您可以使用@StepScpoe来定义这个步骤。根据职务参数,您可以选择写入器。

代码语言:javascript
复制
@Bean
    @StepScope
    protected Step step2(ItemReader<someDto> reader,
                        ItemWriter<someDto> writer ,ItemWriter<someDto> topicWriter,"#{jobParameters['writerType']}") final String type ) {

                            ItemWriter<someDto> myWriter;           
                            if(type.equals("topic"))
                            {
                                myWriter=topicWriter;
                            }
                            else
                            {
                                myWriter=writer;
                            }

        return stepBuilderFactory.get(BatchConstants.STEP_NAME)
                .<someDto, someDto> chunk(BatchConstants.CHUNKSIZE)
                .reader(reader)
                .writer(myWriter) 
                .build();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48998154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档