У меня есть пакетная работа, которую я хочу запускать каждую минуту. Планировщик запускает задание каждую минуту, как и планировалось, но после первого запуска используется тот же экземпляр задания. В моем 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>