【问题标题】:spring batch: How to set up a job repository for every jobspring batch:如何为每个作业设置作业存储库
【发布时间】: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


【解决方案1】:

这个对我有用,例如作为单元测试jobRepository

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
</bean>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2014-12-10
    • 2014-12-24
    • 1970-01-01
    相关资源
    最近更新 更多