4

spring-batch 2.1.8.RELEASE を使用した Spring Batch の命名規則にかなり混乱しています。

主な問題:

2 つの異なるジョブですが、内部の同じステップ (異なるプロパティを取得します) があり、その名前は一意ではありません。ジョブの 1 つを実行しようとすると、たとえば job1. 次に、job2 に定義されている場合でも、prop2 の値「file2」を取得します。(ステップ量、リスナーなどの詳細があまりない抽象化の例にすぎません。)そのプロセスの規則性や理由を理解できません。

<batch:job id="job1" parent="parentJob">
    <batch:step id="copyFile">
        <batch:tasklet>
            <bean class="xxx.xyz.classXXX"
                scope="step">
                <property name="prop1"
                    value="file1" />
            </bean>
        </batch:tasklet>
    </batch:step>
</batch>

各ジョブは独自のファイルで定義されます。

<batch:job id="job2" parent="parentJob">
    <batch:step id="copyFile">
        <batch:tasklet>
            <bean class="xxx.xyz.classXXX"
                scope="step">
                <property name="prop2"
                    value="file2" />
            </bean>
        </batch:tasklet>
    </batch:step>
</batch>

約 80 のジョブを取得しました。各ジョブには最初のステップとして copyFile があります。ただし、すべてのジョブの途中にもステップがあり、同じように名前を付ける必要があります。これらの注入の混乱/失敗を回避する可能性はありますか? 「copyFile1」、「copyFile2」などの命名手順のほかに..

(名前とプロパティは、煙と鏡に他なりません!)

さらに情報が必要ですか?私の説明が悪くないことを願っています。前もって感謝します!

歓声マックス。

4

2 に答える 2

4

どうやらステップIDは春のバッチでグローバルです(今日確認しました)。それらはコンテキストの作成時にマップにロードされ、同じ ID を持っているため、最後に読み取られたステップが優先されます。

この機能の回避策: 個別のステップ ID を使用します。たとえば、次のように batch:job ID と等しいプレフィックスを使用します。

<batch:job id="job1" parent="parentJob">
  <batch:step id="job1_copyFile">
    <batch:tasklet>
      <bean class="xxx.xyz.classXXX" scope="step">
        <property name="prop1" value="file1" />
      </bean>
    </batch:tasklet>
  </batch:step>
</batch>

<batch:job id="job2" parent="parentJob">
  <batch:step id="job2_copyFile">
    <batch:tasklet>
      <bean class="xxx.xyz.classXXX" scope="step">
        <property name="prop2" value="file2" />
      </bean>
    </batch:tasklet>
  </batch:step>
</batch>
于 2013-09-13T13:41:43.200 に答える
0

同じクラスを持っていますが、id プロパティが設定されていないため、互いにオーバーライドする 2 つの匿名 Bean があります。

異なるパラメーターを使用しても Bean が区別されないため、それらはオーバーライドされます。

Bean に id 属性を設定するだけで、問題が解決するはずです。

   <bean id="file1" class="xxx.xyz.classXXX"
        scope="step">
        <property name="prop1"
            value="file1" />
    </bean>

これが役立つことを願っています...

于 2012-06-22T13:05:35.827 に答える