可以通过懒惰初始化Spring Batch作业bean吗?

时间:2014-05-05 15:52:46

标签: java spring spring-batch lazy-initialization

在Spring中,bean可以配置为懒惰地初始化。 Spring Batch作业也是(Spring管理的)bean。也就是说,当我配置像

这样的东西时
<sb:job id="dummyJob" job-repository="jobRepository">
    <sb:step id="dummyStep">
        <sb:tasklet ref="dummyTasklet" />
    </sb:step>
</sb:job>

我实际上在Spring容器中配置了一个新的(Job - 类型)bean。

我的问题是我真的希望我的Job bean被懒惰地初始化。因为它们是常规的Spring管理bean,所以我希望我可以指示Spring上下文让它们变得懒惰。这是因为我有大量的bean,在很多情况下,在我执行基于Spring的应用程序时,我只运行一个作业。

但我可以在lazy-init配置中设置<sb:job... \>属性。有什么办法可以强制进行延迟初始化吗?如果我使用<beans\>配置我的default-lazy-init="true"根,这还适用于Job bean吗?

2 个答案:

答案 0 :(得分:3)

这里有两个选项:

  1. 手动配置作业。这将允许您使用Spring公开的常规lazy-init属性。
  2. 使用Spring Batch 3中现有的JobScope.Spring Batch 3即将推出,但JobScope在最后一个里程碑中可用。

答案 1 :(得分:1)

请详细说明Michael Minella's回答。 我对lazy初始化作业存储库有类似的要求。 我正在使用Spring Batch 2.1.9。 以下内容对我有用。

<bean id="jobRepository"
     class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
     lazy-init="true">
        <property name="dataSource" ref="jobDataSource"/>
        <property name="transactionManager" ref="jobTransactionManager"/>
</bean>

请注意我遇到的一个陷阱:设置databaseType,即避免以下内容:

<property name="databaseType" value="SQLSERVER"/>

这很糟糕,因为它禁用了数据库类型的自动发现并破坏了在H2上工作的JUnits。