11

Job ExecutionId をエンティティのフィールドの 1 つとして保存する必要があります。(私は JpaItemWriter を使用しています) ここでのトピックの 1 つは、StepExcecution から説明します。StepContext -> JobExecution を取得できます。その場合、StepExecution を取得するにはどうすればよいですか?

(あるステップから別のステップにデータを渡す必要はありません。必要なのは JobExecuionId だけです)

助けてくれてありがとう、Muneer Ahmed

4

6 に答える 6

5

エンティティを値で更新するプロセッサを使用することをお勧めします。プロセッサが直接実装している場合、ItemProcessor<T>自動的にStepExecution. を取得するStepExecutionには、次のいずれかを実行します。- StepExecutionListener を実装し、beforeStepメソッドから変数として設定します - 呼び出されるメソッドを作成し、[something](StepExecution execution)注釈を付けます@BeforeStep

リスナーを介して StepExecution を注入したら、jobExecutionId を取得してエンティティに設定できます。

public class MyEntityProcessor implements ItemProcessor<MyEntity, MyEntity> {

private long jobExecutionId;

@BeforeStep
public void beforeStep(StepExecution stepExecution) {
    jobExecutionId = stepExecution.getJobExecutionId();
}

@Override
public MyEntity process(MyEntity item) throws Exception {
    //set the values
    item.setJobExecutionId(jobExecutionId);
    //continue
    return item;
}

}
于 2013-01-10T17:49:40.273 に答える
5

Itemprocessor の @Scope("job") を使用してスコープをジョブとして設定し、以下のように @Value("#{jobExecution}") 式を使用して JobExecution を簡単に取得できます。

@Service
@Scope("job")
public class XsltTransformer implements ItemProcessor<Record, Record> {

@Value("#{jobExecution}")
private JobExecution jobExecution;

}
于 2015-10-08T12:48:33.500 に答える
1

MyEntityProcessor で @BeforeStep を使用する場合は、リスナーのように宣言する必要があります

<batch:listeners>
 <batch:listener ref="myEntityProcessor" />
</batch:listeners>
于 2015-03-10T11:52:21.523 に答える