毎分実行したいバッチジョブがあります。スケジューラーは計画どおりに毎分ジョブを起動しますが、最初の起動後、同じジョブインスタンスが使用されています。私のItemReaderには、コードが1回実行されるとトリップするフラグがあります。そのため、後続のすべての起動で同じインスタンスが使用されるため、最初の実行後に新しいものは何も読み取られません。
ドキュメント(http://static.springsource.org/spring-batch/reference/html/configureJob.html)を調べたところ、ジョブBeanのrestartable属性をfalseに設定しているとのことでした。これにより、呼び出しごとに新しいインスタンスが強制的に作成されます(セクション4.1.1再起動性)。
これは問題を修正していません。「this.hashCode()」と書き出すと、リーダークラスが呼び出されるたびに同じハッシュ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>