Spring Batch для передачи данных в тасклет из Reader и выполнения вызовов БД? - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над приложением Spring Batch and Spring Boot v2.2.6.RELEASE. В этом приложении я читаю данные из базы данных Oracle, и теперь, основываясь на данных, которые я получаю, мне нужно вызвать систему Postgres (обработать две разные таблицы), получить данные и сохранить их в системе Couchbase.

Единственная проблема, на которую нужно обратить внимание, заключается в том, есть ли способ, если мы сможем

1) Считать все данные и передать их в Tasklet

2) В Tasklet делает один вызов БД, передает список userId в SQL WHERE предложении и получает все необходимые txId.

3) Также в самом Tasklet вызовите другую таблицу, передайте список txId в предложении SQL WHERE и получите все необходимые ScoreCode

Это позволит избежать многократных вызовов БД из Processor только для получения данных. один и не нужно иметь производительность хитов.

Мой образец процессора для справки.

public class SourceBatchProcessor implements ItemProcessor<SourceDTO, TargetDTO>{

    @Autowired 
    private BatchDAO batchDAO;

    ModelMapper modelMapper = new ModelMapper();

    @Override
    public TargetDTO process(SourceDTO sourceDTO) throws Exception {
        TargetDTO targetDTO = modelMapper.map(sourceDTO, new TypeToken<TargetDTO>() {}.getType());

        String txId = batchDAO.getTransactionId(sourceDTO.getTxId);
        String countryCode = batchDAO.getScoreCode(txId);

        targetDTO.setCREATOR(Constants.SPRING_BATCH);
        targetDTO.setUPDATED_BY(Constants.SPRING_BATCH);
        targetDTO.setCREATE_DATE(String.valueOf(Instant.now()));
        targetDTO.setLAST_UPDATE_DATE(String.valueOf(Instant.now()));
        targetDTO.setSCORE_CD(countryCode); 
        return targetDTO;   
    }
}
...