Я использую Spring Integration вместе с Spring JPA.
Мне нужно прочитать данные из 5 таблиц и отправить их в один класс процессора для сложной обработки.
5 таблиц: UserExecution, UserExecutionDetail, Master, Inventory, Store.
Мне нужны кусочки данных из каждой из этих таблиц. Я не хочу создавать POJO для хранения данных БД, а вместо этого хочу сохранить данные БД на карте.
Затем карта будет передана в класс процессора для сложной обработки.
Каким должен быть код в процессоре? Я приложил код, который использовал ниже.
![enter image description here](https://i.stack.imgur.com/l7Ydv.png)
Класс процессора:
public class DataProcessor {
@Transformer
public void processUserData(Message<Map<String,String>> msg) {
//Some complex logic using userDetailsMap
}
}
Получение данных БД:
class ServicetoDBAdaptor {
@Autowired
UserExecutionDetail userExecutionDetail;
@Autowired
UserExecution userExecution;
@Autowired
Master master;
@Autowired
Inventory inventory;
@Autowired
Store store;
@Autowired
UserExecutionDetailRepository userExecutionDetailRepository;
@Autowired
UserExecutionRepository userExecutionRepository;
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void readFromTable1_UserExecutionDetail(Message<UserExecutionDetail> msg) throws Exception {
userExecutionDetail = userExecutionDetailRepository.findById(msg.getPayload().getId());
}
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void readFromTable2_UserExecution(Message<UserExecutionDetail> msg) throws Exception {
userExecution = userExecutionRepository.findById(msg.getPayload().getId());
}
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void readFromTable3_Master(Message<UserExecutionDetail> msg) throws Exception {
master = userExecutionRepository.findById(msg.getPayload().getId());
}
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void readFromTable4_Inventory(Message<UserExecutionDetail> msg) throws Exception {
inventory = userExecutionRepository.findById(msg.getPayload().getId());
}
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void readFromTable5_Store(Message<UserExecutionDetail> msg) throws Exception {
store = userExecutionRepository.findById(msg.getPayload().getId());
}
Map<String,String> userDetailsMap = new HashMap<String,String>();
userDetailsMap.put("ID",msg.getPayload().getId());
userDetailsMap.put("ExecutionStatus",userExecution.getStatus());
userDetailsMap.put("ExecutionDetailStatus",userExecution.getDetailedStatus());
userDetailsMap.put("TotalOrders",master.getTotalOrders());
userDetailsMap.put("OrdersCompleted",inventory.getOrdersCompleted());
userDetailsMap.put("StoreStatus",store.getStoreStatus());
return userDetailsMap;
}