例えばファイルパスなど、毎回違う値を渡すときに推奨されるやり方でコーディングしてみる。(reader や write などの Step で指定する(受け取る)やり方。今回は processor でジョブ引数を受け取るか形)
「Spring Batch 6 で Listener を追加してログを出す」で修正したバッチプログラムに修正を加える。(修正点のみ記述するので、全体のソースが見たい人は、元ネタのページを手繰ってくださいませ)
@Bean
@StepScope // ジョブ引数を受け取るために必須
public ItemProcessor<UserCombinedDto, UserCombinedDto> processor(
@Value("#{jobParameters['models']}") Integer models,
@Value("#{jobParameters['modelName']}") String modelName) {
return item -> {
String phone = item.user_phone_number(); // DtoがRecordの場合のゲッター。通常のクラスなら .getUser_phone_number()
// 電話番号が null でなく、かつ 090 または 080 で始まる場合
if (phone != null && (phone.startsWith("090") || phone.startsWith("080"))) {
// 表示名
String displayName = "スマホ";
// ジョブ引数をチェック
if (models == null || "1".equals(models)) { // ジョブ引数未指定、あるいは models == 1
displayName = "携帯";
}
else {
if ("2".equals(models) && (modelName != null && !modelName.isEmpty())) {
// ジョブ引数 models = 2 で、modelName も指定されている
displayName = modelName;
}
else {
// ジョブ引数 models が 1でも 2でもない。または modelName が未指定
displayName = "未定義";
}
}