Я работаю над приложением 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;
}
}