Java Spring批处理作业bean可以延迟初始化吗?
在Spring中,可以将bean配置为延迟初始化。Spring批处理作业也是(Spring管理的)bean。也就是说,当我配置如下内容时Java Spring批处理作业bean可以延迟初始化吗?,java,spring,spring-batch,lazy-initialization,Java,Spring,Spring Batch,Lazy Initialization,在Spring中,可以将bean配置为延迟初始化。Spring批处理作业也是(Spring管理的)bean。也就是说,当我配置如下内容时 <sb:job id="dummyJob" job-repository="jobRepository"> <sb:step id="dummyStep"> <sb:tasklet ref="dummyTasklet" /> </sb:step> </sb:job>
<sb:job id="dummyJob" job-repository="jobRepository">
<sb:step id="dummyStep">
<sb:tasklet ref="dummyTasklet" />
</sb:step>
</sb:job>
实际上,我在Spring容器中配置了一个新的(Job
-typed)bean
我的问题是我真的希望我的作业bean被延迟初始化。由于它们是常规的Spring管理bean,我希望我可以指示Spring上下文使它们变懒。这是因为我有大量的bean,在许多情况下,在基于Spring的应用程序的一次执行期间,我只运行一个作业
但是在我的
配置中没有lazy init
属性可以设置。有什么方法可以强制延迟初始化吗?如果我用默认的lazy init=“true”
配置我的
根目录,这是否也适用于作业
bean?这里有两个选项:
手动配置作业。这将允许您使用Spring公开的常规lazy init属性
使用Spring批次3中现在提供的JobScope。Spring第3批很快就可以使用了,但是JobScope在上一个里程碑中就可以使用了
这里有两个选项:
手动配置作业。这将允许您使用Spring公开的常规lazy init属性
使用Spring批次3中现在提供的JobScope。Spring第3批很快就可以使用了,但是JobScope在上一个里程碑中就可以使用了
我只是想详细说明一下答案。
我有一个类似的需求来初始化作业存储库。
我正在使用SpringBatch 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>
注意我遇到的一个陷阱:不要设置数据库类型,即避免以下情况:
<property name="databaseType" value="SQLSERVER"/>
这是不好的,因为它禁用了数据库类型的自动发现,并破坏了我在H2上工作的JUnits。只是为了详细说明答案。
我有一个类似的需求来初始化作业存储库。
我正在使用SpringBatch 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>
注意我遇到的一个陷阱:不要设置数据库类型,即避免以下情况:
<property name="databaseType" value="SQLSERVER"/>
这很糟糕,因为它禁用了数据库类型的自动发现,并破坏了在H2上工作的JUnits。1。您的意思是将其配置为常规的
,其类将是作业的实现者之一?这种方法会不会丢失Spring批处理框架在“直接”配置作业时执行的某种幕后工作?2.有关于这方面的文件吗?我找不到相关的东西。作业范围是否仅适用于微线程、读卡器、处理器和写入程序?或者它也适用于作业bean?我需要后者。是的,我就是这个意思。请记住,名称空间只是为您完成工作……工作仍在进行中,没有任何东西可以阻止您自己完成它。2.说得好。无法在命名空间中将作业设置为作业范围。只有其他的豆子。您的意思是将其配置为常规的
,其类将是作业的实现者之一?这种方法会不会丢失Spring批处理框架在“直接”配置作业时执行的某种幕后工作?2.有关于这方面的文件吗?我找不到相关的东西。作业范围是否仅适用于微线程、读卡器、处理器和写入程序?或者它也适用于作业bean?我需要后者。是的,我就是这个意思。请记住,名称空间只是为您完成工作……工作仍在进行中,没有任何东西可以阻止您自己完成它。2.说得好。无法在命名空间中将作业设置为作业范围。只是其他的豆子。