2012-06-15 53 views
1

我有一个批量作业,我想每分钟运行一次。调度程序按计划每分钟启动一次作业,但在第一次启动后,将使用相同的作业实例。在我的ItemReader中有一个标志,一旦代码执行一次就会被触发,所以在每次后续启动时使用相同的实例,在第一次运行后没有任何新的事情会被读取。弹簧批次:忽略可重新启动的属性

我查看了文档(http://static.springsource.org/spring-batch/reference/html/configureJob.html),它说为job bean设置可重启属性为false。这应该强制每次调用都创建一个新实例(第4.1.1节“可重新启动性”)。

这并没有解决这个问题。如果我写出“this.hashCode()”,每次调用reader类时都会得到相同的散列ID。

我试着把工作上的可重启属性,以及它的父母(这是SimpleJob的扩展),都没有帮助。

我还在作业启动器的jobParameters中附加了一个时间戳,因此每个作业都有唯一的参数。这仍然不能解决它。作业名称始终相同。

有什么我失踪?

<bean id="simpleJob" class="CustomJob" abstract="true"> 
      <property name="jobRepository" ref="jobRepository"/> 
      <property name="restartable" value="false"/> 
     </bean> 
<bean id="simpleStep" class="org.springframework.batch.core.step.item.SimpleStepFactoryBean" abstract="true"> 
    <property name="transactionManager" ref="transactionManager"/> 
    <property name="jobRepository" ref="jobRepository"/> 
    <property name="startLimit" value="100"/> 
    <property name="commitInterval" value="1"/> 
</bean> 

<batch:job id="myJob" parent="simpleJob"> 
     <batch:step id="Step1" next="step2" parent="simpleStep"> 
      <batch:tasklet> 
       <batch:chunk> 
        <batch:reader> 
         <bean class="myReader"> 
          <property name="userName" value="***"/> 
          <property name="password" value="***"/> 
          <property name="url" value="***"/> 
         </bean> 
        </batch:reader> 
        <batch:writer> 
         <bean class="MyWriter"> 
          <property name="dataSource" ref="dataSource"/> 
          <property name="updateOnKeyConflict" value="false"/> 
          <property name="table" value="myTable"/> 
         </bean> 
        </batch:writer> 
       </batch:chunk> 
      </batch:tasklet> 
     </batch:step> 
     <batch:step id="step2" next="step3" parent="simpleStep"> 
      <batch:tasklet> 
       <bean class="queryTasklet"> 
        <property name="dataSource" ref="dataSource"/> 
        <property name="sql" value="***"/> 
       </bean> 
      </batch:tasklet> 
     </batch:step> 
     <batch:step id="step3" parent="simpleStep"> 
      <batch:tasklet> 
       <batch:chunk> 
        <batch:reader> 
         <bean class="mySeriesReader"> 
          <property name="userName" value="***"/> 
          <property name="password" value="***"/> 
          <property name="url" value="***"/> 
         </bean> 
        </batch:reader> 
        <batch:writer> 
         <bean class="mySeriesWriter"> 
          <property name="timeSeriesDAO" ref="timeSeriesDAO"/> 
          <property name="updateOnKeyConflict" value="false"/> 
         </bean> 
        </batch:writer> 
       </batch:chunk> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

回答

1

做了更多的研究,在我的reader class bean中添加了属性scope =“step”,纠正了这个问题。您可以参考文档的第5章并阅读关于后期绑定的内容。