2017-09-28 5 views
1

バネバッチを使用していますが、ジョブインスタンスが既に存在するため、エラーが発生しました。ジョブパラメータに現在の時刻を追加する必要があります。私は.Hereが私のコードであるジョブ偶然にを追加する場所を把握することができません:私はThe job already existエラーを取得し、同じkId複数回のジョブを実行しようとすると現在のタイムスタンプをジョブパラメータのバネバッチとして渡します。

<step id="myStep"> 
<tasklet> 
    <chunk reader="myReader" processor="myProcessor" writer="myWriter" commit-interval="6000" skip-limit="9000"> 
    //some more code. 
</chunk> 
</tasklet> 
</step> 

<bean id="myReader" class="org.springframework,batch.item.database.StoredProcedueItemReader" scope="step"> 
//define property for datasource , procedurename , rowmapper, parameters 
<property name="preparedStatementSetter" ref="myPreparedStatmentSetter"> 
</bean> 

<bean id="myPreparedStatmentSetter" class="com.mypackage.MyPreparedStatementSetter" scope="step"> 
<property name="kId" value="#{jobParameters[kId]}"> 
</bean> 

ので、私はに現在のタイムスタンプを追加する必要があります私の仕事のパラメータ。 beanのプロパティとして現在のタイムスタンプを追加すると、myPreparedStatmentSetterで十分でしょうか、それとも別の場所にjobparameterを追加する必要がありますか?正確にどこから雇用パラメータが春のファイルから選んだのですか?私はここに豆にタイムスタンプを追加する必要がある場合には

質問は、ストアドプロシージャを-myされるだけkID PARAMTERなどを取る、私はmyPreparedStatmentSetterで同じを追加する必要がある理由、その後、ストアドプロシージャに現在のタイムスタンプを渡す必要がいけません。

また、Javaコードなしでxmlファイルに現在のタイムスタンプを追加するにはどうすればよいですか?ここでEDIT

は私のjobLauncher Beanです

ブロック引用

ブロック引用

+1

jobParameterをjoblauncherに提供する必要がありますので、ジョブの起動方法を詳しく説明してください。 jobParameterは、ステップまたはリーダーの設定とは関係ありません。また、xmlの代わりにJavaの設定を使用することを提案します。 –

+0

@Sabir Khan私はCommandLineJobRunnerを使用しています – user2713255

答えて

0

あなたの仕事のパラメータにすでにKIdを追加していると思います。 joblaucher.run()メソッドに以下を追加してください。

new JobParametersBuilder() 
.addLong("time",System.currentTimeMillis()) 
.addLong("KId",<your KID>) 
.toJobParameters(); 
1

「ランダム」ジョブパラメータを手作業で追加すると、動作することができますが、ジョブインスタンスを回避する最も理想的な方法は既に存在しています。エラーです。代わりに、あなたの仕事にJobParametersIncrementerを追加することを検討する必要があります。 Springはこれの実装としてRunIdIncrementerを提供しています。設定されたジョブは次のようになります。

@Bean 
public Job myJob() { 
    return jobBuilderFactory.get("myJob") 
          .incrementer(runIdIncrementer()) 
          .start(step1()) 
          .build(); 
} 

@Bean 
public JobParametersIncrementer runIdIncrementer() { 
    return new RunIdIncrementer(); 
} 
関連する問題