Spring Batch для передачи данных в Tasklet из Reader и выполнения вызовов БД?
Я работаю на Spring Batch and Spring Boot v2.2.6.RELEASE
Заявка. В этом приложении я читаю данные изOracle
БД, и теперь, исходя из полученных данных, мне нужно позвонить в Postgres
system (две разные таблицы), получить данные и сохранить их в системе Couchbase.
Единственная проблема, на которую я хочу обратить внимание, это то, что есть способ, если мы можем
1) Прочитать все данные и перейти к Tasklet
2) В
Tasklet
сделать один вызов БД, передать списокuserId
в SQLWHERE
пункт и получите все необходимоеtxId
.3) Также в
Tasklet
сам вызовите другую таблицу, передайте список txId в SQLWHERE
пункт и получите все необходимоеScoreCode
Это позволит избежать многократных вызовов БД от процессора, просто получая данные один за другим и не требуя снижения производительности.
Мой образец процессора для справки.
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;
}
}