2

毎分実行したいバッチジョブがあります。スケジューラーは計画どおりに毎分ジョブを起動しますが、最初の起動後、同じジョブインスタンスが使用されています。私の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>
4

1 に答える 1