Spring Batchメタデータ
18262 ワード

MetaTableにロールとどのような内容が含まれているかを確認しようとします.
1. BATCH_JOB_INSTANCE
定義#テイギ#
BATCH JOB INSTANCE表:ジョブパラメータに基づいて作成された表

JOB_INSTANCE_ID
BATCH JOB INSTANCE表のPKJOB_NAME
実行するバッチジョブNamesimpleJob
が保存されているのが見えます.BATCH_JOB_INSTANCE 테이블
は、Job Parameter
に基づいて生成されたテーブルである.Job Parameter:Spring Batchの実行時に外部から受信可能なパラメータ
同じBatch Jobであっても、
Job Parameter
が異なるとBATCH_JOB_INSTANCE
に書き込まれ、Job Parameter
が同じであれば書き込まれない.変更されたコード
SimpleJobConfig.java
@Slf4j // log 사용을 위한 lombok 어노테이션
@RequiredArgsConstructor // 생성자 DI를 위한 lombok 어노테이션
@Configuration
public class SimpleJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job simpleJob() {
return jobBuilderFactory.get("simpleJob")
.start(simpleStep1(null))
.build();
}
@Bean
@JobScope
public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) {
return stepBuilderFactory.get("simpleStep1")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is Step1");
log.info(">>>>> requestDate = {}", requestDate);
return RepeatStatus.FINISHED;
})
.build();
}
}
変更されたコードは、Job Parameterとして受信した値をログに追加して出力する機能です.プログラムargumentsに
requestDate=20180805
と入力します.実行結果
次に、ジョブパラメータを追加してBatchを実行します.

[環境を実行]タブをクリックして[設定]ウィンドウに移動します.

プログラムargumentsにrequestDate=2180808080805と入力します.

ジョブパラメータが転送され、ログがよく撮れていることが確認できます.
ジョブパラメータが違うとジョブが動くと言っているので確認してみましょう.
ジョブパラメータが違う
プログラムargumentsに
requestDate=20211122
と入力します.
ジョブパラメータは同じです

Jobはエラーコードと一緒に動作しません.
2. BATCH_JOB_EXECUTION
説明:

JOB_EXECUTION 테이블
4個のROWがある.この4つの実行データは、以前は実行パラメータがなかった
simpleJob
、requestDate=2180808080805パラメータで実行されたsimpleJob
、requestDate=218080808080808080806パラメータで実行されたsimpleJob
までである.JOB_EXECUTION
およびJOB_INSTANCE
は親子関係である.(JOB INSTACNE-親/JOB EXECUTION-子)
JOB EXECUTIONは、両親のJOB INSTACNEの成功/失敗のすべての履歴を持っている.
コードの変更
SimpleJobConfig.java
@Slf4j // log 사용을 위한 lombok 어노테이션
@RequiredArgsConstructor // 생성자 DI를 위한 lombok 어노테이션
@Configuration
public class SimpleJobConfig{
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job simpleJob() {
return jobBuilderFactory.get("simpleJob")
.start(simpleStep1(null))
.next(simpleStep2(null))
.build();
}
@Bean
@JobScope
public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) {
return stepBuilderFactory.get("simpleStep1")
.tasklet((contribution, chunkContext) -> {
throw new IllegalArgumentException("step1에서 실패합니다.");
})
.build();
}
@Bean
@JobScope
public Step simpleStep2(@Value("#{jobParameters[requestDate]}") String requestDate) {
return stepBuilderFactory.get("simpleStep2")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is Step2");
log.info(">>>>> requestDate = {}", requestDate);
return RepeatStatus.FINISHED;
})
.build();
}
}
実行結果
今回はJob Parameterを
requestDate=20211122
に変更しました.

予想されたExceptionとともに、Batch Jobが失敗したことがわかります.

BATCH JOB EXECUTIONテーブルを確認します.
4番目にFKでJOB INSTACNEをくわえたEXECUTIONがFAILEDであることが確認できます.
コードを修正してJobを成功させる.
変更されたコード
@Bean
@JobScope
public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) {
return stepBuilderFactory.get("simpleStep1")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is Step1");
log.info(">>>>> requestDate = {}", requestDate);
return RepeatStatus.FINISHED;
})
.build();
}

上の図に示すように、変更されたコードで再実行し、ジョブが正常に実行されたことを確認します.

表を見ることで、JOB INSTANCEとBATCH JOB EXECUTIONの違いを特定できます.
BATCH JOB EXECUTIONのJOB INSTANCE ID列には、同じID(4)を持つ2つのROWが見られる.
このうち1番目のROW STATUSはFAILED、2番目のROWはCOMPLETEDである.
Job Parameter
requestDate=20211123
で生成されたBATCH JOB INSTACNE(id=4)は2回運転され、1回目は失敗、2回目は成功した.同じジョブパラメータで2回実行しますが、同じパラメータで実行するエラーは発生しません.
Spring Batchは、同じジョブパラメータが正常に記録されている場合にのみ、再実行できないことを知ることができます.
3. JOB, JOB_INSTANCE, JOB_EXECUTION

ここで言うJobは上に書いてあるSpringBatch Jobです.
上記の2つのテーブルに加えて、Jobに関連するテーブルがさらに存在する.
BATCH_JOB_EXECUTION_PARAM
BATCH JOB EXECUTIONテーブル作成時に入力したジョブパラメータを含む.
Reference
https://jojoldu.tistory.com/326?category=902551
Reference
この問題について(Spring Batchメタデータ), 我々は、より多くの情報をここで見つけました https://velog.io/@code12/Spring-Batch-메타-데이터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol