バッチ処理にSpringバッチを使用しています。バッチ処理を行う前に、のようなすべてのジョブパラメータを検証したいと思いますproductName, productID, start date, end date, productType
。これらのジョブパラメータがnullまたは悪い値を含んでいる場合、検証ステップに失敗してジョブを失敗させる必要があります。
検証ステップと Tasklet を作成しました。Tasklet では、ジョブ パラメータの検証を処理する予定です (すべてのジョブ パラメータに対して null チェックを行うため)。私は初めてSpringバッチをやっているので、専門家から聞きたいのは、ジョブパラメータの検証を処理するのに適切な場所であるか、それを行う効率的な方法があります. 誰かがあなたの貴重な提案や例を提供するのを手伝ってくれると本当に助かります.
事前にあなたの助けに感謝します! ありがとう
以下の私のサンプルコードを見つけてください:
MyJobConfig.java
@Configuration
public class MyJobConfig {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean("myBatchJob")
public Job job(@Qualifier("validateProductJobParam") Step validateProductJobParametersStep) {
Job job = jobBuilderFactory.get("myBatchJob")
.incrementer(new RunIdIncrementer())
.start(validateProductJobParametersStep)
.on("FAILED")
.end()
.from(validateProductJobParametersStep).on("*").to(processProductBatch)
.end()
.build();
return job;
}
@Bean(name = "validateProductJobParam")
public Step validateProductJobParametersStep() {
return stepBuilderFactory.get("validate-product-param")
.tasklet(new JobParamValidateTasklet())
.allowStartIfComplete(true)
.build();
}
}
JobParamValidateTasklet.java
import org.springframework.batch.core.*;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import java.util.Map;
public class JobParamValidateTasklet implements Tasklet, StepExecutionListener {
private StepExecution stepExecution;
private JobExecution jobExecution;
private bookean isValidation;
@Override
public void beforeStep(StepExecution stepExecution) {
this.stepExecution = stepExecution;
this.jobExecution = stepExecution.getJobExecution();
}
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
Map<String,JobParameter> jobMap = jobExecution.getJobParameters().getParameters();
String productName = (String)jobMap.get("PRODUCT_NAME").getValue();
String productId = (String)jobMap.get("PRODUCT_ID").getValue();
String prdouctType = (String)jobMap.get("PRODUCT_TYPE").getValue();
if (productName == null && productId == null && prdouctType == null ) {
isValidation = false;
} else {
isValidation = true;
}
return null;
}
public ExitStatus afterStep(StepExecution stepExecution) {
if(!isValidation)
return ExitStatus.FAILED;
else
return ExitStatus.COMPLETED;
}
}