1

バッチ処理に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;
    }

}
4

1 に答える 1