在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吗?
答案 0 :(得分:3)
这里有两个选项:
答案 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。