首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Spring批处理的实际作业之前读取元数据

如何在Spring批处理的实际作业之前读取元数据
EN

Stack Overflow用户
提问于 2022-01-08 03:35:18
回答 1查看 135关注 0票数 0

我目前正在设计一个Spring批处理应用程序,该应用程序从表中读取数据,转换数据,然后将其写入另一个表。但是,在开始读取源表之前,我需要为应用程序运行收集一些元数据(例如,阅读假日日历表以确定它是否是银行假日)。这个元数据在运行时将不再改变,因此它只需要在应用程序运行的开始时读取一次。如何才能做到这一点?用JobListener?为此配置一个单独的Job,然后通过ExecutionContext将信息传递给“实际”作业?配置一个只执行一次的单独步骤?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-09 19:52:18

配置JobExecutionListener以获取所需信息,并将其存储在作业的ExecutionContext上。

您可以创建一个监听器类,该类可以扩展JobExecutionListenerSupport以仅覆盖beforeJob方法,也可以创建具有带有@BeforeJob注释的beforeJob方法的独立侦听器类。

在配置作业时,只需在添加任何步骤之前将自定义侦听器类的实例添加到JobBuilder配置中即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
public Job myJob() {
    return this.jobBuilderFactory.get("myJob")
                     .listener(new MyListener())
                     .start(step1())
                     .next(step2())
                     .next(step3())
                     .build();
}

然后,您在作业的ExecutionContext中添加的任何内容都可以注入到任何其他配置好的处理器/阅读器/作家/步骤bean中,只要它们使用@JobScope或@StepScope进行注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
@JobScope
public ItemReader<MyItem> myItemReader(
        @Value("#{jobExecutionContext['myDate']}") Date myDate) {
    //...
}

组件类也同样工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
@JobScope
static class MyProcessor implements ItemProcessor<ItemA, ItemB> {

    private Date myDate;

    public MyProcessor(
            @Value("#{jobExecutionContext['myDate']}") Date myDate) {
        this.myDate = myDate;
    }

// ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70631929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文