2012-06-15 6 views
1

У меня есть пакетная работа, которую я хочу запускать каждую минуту. Планировщик запускает задание каждую минуту, как и планировалось, но после первого запуска используется тот же экземпляр задания. В моем ItemReader есть флаг, который срабатывает после того, как код выполняется один раз, поэтому с тем же экземпляром, который используется с каждым последующим запуском, после первого запуска ничего не считывается.Spring Batch: атрибут Restartable игнорируется

Я просмотрел документы (http://static.springsource.org/spring-batch/reference/html/configureJob.html), и он сказал, что для перезапуска атрибута атрибут restartable используется для false. Это должно принудительно создать новый экземпляр с каждым вызовом (раздел 4.1.1 «Перезапуск»).

Это не устранило проблему. Если я выпишу «this.hashCode()», я получаю один и тот же идентификатор хэширования каждый раз, когда вызывается класс читателя.

Я попытался поместить перезагружаемый атрибут в задание, а также его родительский элемент (который является расширением 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

Выполнение дополнительных исследований, добавление атрибута scope = "step" в мой класс класса читателя, исправило проблему. Вы можете обратиться к главе 5 документации и прочитать о позднем связывании.

Смежные вопросы