【发布时间】:2012-02-03 10:57:55
【问题描述】:
我正在运行多个作业,我希望每个作业都有一个单独的作业存储库(内存中实现)。
请在下面找到我尝试过的 bean 定义。请注意,我已尝试使用范围原型指定 bean。
我得到一个java.lang.IllegalArgumentException: JobExecution must already be saved 异常。
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.SimpleJobRepository"
scope="prototype">
<constructor-arg>
<bean class="org.springframework.batch.core.repository.dao.MapJobInstanceDao"/>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.batch.core.repository.dao.MapJobExecutionDao" />
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.batch.core.repository.dao.MapStepExecutionDao"/>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.batch.core.repository.dao.MapExecutionContextDao"/>
</constructor-arg>
</bean>
【问题讨论】:
-
作业存储库是一次创建的,所以不管你是否使用原型,你能解释一下你是如何运行作业的吗?
-
您可能需要创建自己的 JobLauncher 实现(和其他实现)来执行此操作。 @Michael Lange 在这种情况下是正确的,因为您正在创建单例简单的作业启动器,它将创建一个“单一”作业回购。如果您要尝试执行此操作,则每个作业至少需要一个作业启动器。
-
你为什么要为每个工作做一个回购?
标签: java spring spring-batch