簡體   English   中英

Springboot批處理Tasklet驗證

[英]Springboot batch Tasklet Validation

我正在使用帶有opencsv的spring batch tasklet來處理一些csv文件。 在第1步中將文件讀入內存后,在第2步中,我希望執行一些驗證。 我不確定設置驗證的正確方法是什么。 我正在使用以下代碼。

public class PrimaryCareValidation  implements Tasklet, StepExecutionListener {

    private final Logger logger = LoggerFactory.getLogger(PrimaryCareProcessor.class);

    private List<PrimaryCareDTO> batch;

    @Autowired
    private Validator validator;

    @Override
    public void beforeStep(StepExecution stepExecution) {
        logger.info("PrimaryCare validation initialized.");

        ExecutionContext executionContext = stepExecution
                .getJobExecution()
                .getExecutionContext();
        this.batch = (List<PrimaryCareDTO>) executionContext.get("PrimaryCareDTO");
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        logger.info("PrimaryCare validation ended.");
        return ExitStatus.COMPLETED;    }

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        logger.info("PrimaryCare execute.");

        for (PrimaryCareDTO pcDTO : batch) {
            DataBinder binder = new DataBinder(pcDTO); 

            Set<ConstraintViolation<PrimaryCareDTO>> violations = validator.validate(pcDTO);

            for (ConstraintViolation<PrimaryCareDTO> violation : violations)
            {
                String propertyPath = violation.getPropertyPath().toString();
                String message = violation.getMessage();

                result.addError(new FieldError("employee",propertyPath,

                        "Invalid "+ propertyPath + "(" + message + ")"));
            }

        }

        return RepeatStatus.FINISHED;    }
}

驗證整個DAO列表並將消息添加到消息對象以便稍后返回到步驟3的最佳方法是什么?

我有非常相似的情況,並用於此vavr庫。 它包含有用的Validation對象,該對象可以保存成功的值-在您的情況下為DTO,在失敗的情況下-包含某些消息。 然后有內置的方法可以幫助您將它們壓入一個聚合的Validation

還請注意@Mahmoud在評論中指出的內容。 在這種情況下,最好使用讀寫器處理器,因為它將留下較小的內存空間並且可以擴展。
現在,您有一個大文件的風險,該文件不適合您的應用程序內存。

同樣與您的DTO對象有關。 它們將保留在內存中,除非tasklet退出。 這有發生OutOfMemoryException的風險

請檢查本文: https : //www.baeldung.com/vavr-validation-api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM