当前位置: 首页 > 知识库问答 >
问题:

如何将类似@lazy的内容应用于Spring Batch?

陆栋
2023-03-14

我有一个带有多个作业的Spring Batch项目(作业a、作业B、作业C、…)。当我运行一个特定的作业a时,我得到的作业a的日志显示作业B、C、······也被创造了。是否有任何方法可以避免在启动作业A时创建其他bean。

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    @Qualifier("springDataSource")
    public DataSource springDataSource;

    @Autowired
    @Qualifier("batchJobDataSource")
    public DataSource batchJobDataSource;

}


@Configuration
@PropertySource("classpath:partner.properties")
public class B extends BatchConfiguration {


    @Value("${partnerId}")
    private String partnerId;

    @Lazy
    @Bean
    public Job ProcessB(JobCompletionNotificationListener listener) {
      return jobBuilderFactory
        .get("ProcessB")
        .incrementer(new RunIdIncrementer())
        .listener(listener)
        .start(ProcessStepB())
        .build();
    }

    @Lazy
    @Bean
    public Step (ProcessStepB() {
        return stepBuilderFactory
                .get("(ProcessStepB")
                .<PartnerDTO, PartnerDTO> chunk(1)
                .reader(getPartner())
                .processor(process())
                .writer(save())
                .build();
    }

    @Lazy
    @Bean(destroyMethod = "")
    public Reader getPartner() {    
        return new Reader(batchJobDataSource,partnerId);
    }

    @Lazy
    @Bean
    public Processor process() {
        return new Processor();
    }

    @Lazy
    @Bean
    HistoryWriter historyWriter() {
        return new HistoryWriter(batchJobDataSource);
    }

    @Lazy
    @Bean
    UpdateWriter updateWriter() {
        return new UpdateWriter(batchJobDataSource);
    }

    @Lazy
    @Bean
    public CompositeItemWriter<PartnerDTO> saveTransaction() {
        List<ItemWriter<? super PartnerDTO>> delegates = new ArrayList<>();
        delegates.add(updateWriter());
        delegates.add(historyWriter());
        CompositeItemWriter<PartnerDTO> itemWriter = new CompositeItemWriter<>();
        itemWriter.setDelegates(delegates);
        return itemWriter;
    }
}

我也把@lazy放在了@配置上,但它也起作用了。

共有1个答案

常经赋
2023-03-14

这不应该是一个问题。但这里有几个想法可以尝试:

  • 使用Spring配置文件隔离作业bean
  • 如果使用Spring Boot 2.2+,请尝试激活惰性bean初始化模式
  • 将每个作业打包到自己的罐子中。这是IMO的最佳选择。
 类似资料:
  • 问题内容: 我无法获得CSS生成的内容可用于元素: 有没有人有一个解决方案 实际 工作?提前致谢。 问题答案: 您可以使用jQuery的函数来访问它。 例 这是一个示例,向我展示了如何将css应用于通常在屏幕左上方找到的jQuery徽标。请注意,它必须是相同的域/端口等,因此这就是我的示例在iframe中使用jsfiddle的原因。

  • null c)从命令行如何(PostgreSQL ones?): 编辑MAC OS#默认密码重置 已替换(md5为信任)

  • 问题内容: 在Swift 2中,以下代码正在运行: 但是在Swift 3中它给出了错误: 无法推断出通用参数“ ResultType” 因为现在是通用类型。他们在文件中写道: 因此,例如,如果我的结果类是我应该如何正确请求? 因为这不起作用: 问题答案: 要么 根据您想要的版本。 您必须指定泛型类型,因为否则方法调用是不明确的。 第一个版本是为定义的,第二个版本是使用扩展名自动为每个对象生成的,例

  • 问题内容: 如何用Java编写等效的代码? 问题答案: 您可能还希望将类本身公开,但这实际上是将字面量转换为Java。 C ++模板和Java泛型之间还有其他区别,但是对于您的示例,这些都不是问题。

  • 问题内容: 我有一个简单的页面,其中包含一些iframe部分(以显示RSS链接)。如何将相同的CSS格式从首页应用到iframe中显示的页面? 问题答案: 编辑:除非设置了适当的CORS标头,否则这不能跨域工作。 这里有两件事:iframe块的样式和嵌入在iframe中的页面的样式。您可以按通常方式设置iframe块的样式: 必须通过将iframe中嵌入的页面样式包含在子页面中来进行设置: 或者可

  • 我接到了一个制作covid追踪器的项目。我决定在该站点(https://www.worldometers.info/coronavirus/)中添加一些元素。我对python很陌生,所以决定用BeautifulSoup。我能够刮出基本元素,比如总案例,活动案例等等。然而,每当我试图获取国家名称或数字时,它返回一个空列表。即使存在一个类'sorting_1',它仍然返回一个空列表。有人能指引我哪里错