У меня есть два метода с именами saveNewCustormerDetails и storeFailCustomerSaveDetails. Если какое-либо исключение перейдет в метод saveNewCustormerDetails, то транзакция станет откатом, когда возникнет исключение, мне нужно сохранить сообщение об исключении в базе данных с номером мобильного телефона клиента. Для этого я использую метод storeFailCustomerSaveDetails. но это не работает, потому что откат магазина не позволяет клиентам сохранять детали. Поэтому мне нужно отключить процесс отката только для метода storeFailCustomerSaveDetails. Есть ли способ сделать это?
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class CustomerServiceImpl implements CustormerService {
private final CustomerRepository customerRepository;
private final CustomerSaveFailsRepository customerSaveFailsRepository;
@Autowired
public CustomerServiceImpl(CustomerRepository customerRepository, CustomerSaveFailsRepository customerSaveFailsRepository){
this.customerRepository = customerRepository;
this.customerSaveFailsRepository = customerSaveFailsRepository;
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@Override
public void saveNewCustormerDetails(CustomerDTO customerDTO) {
try{
CustomerEntity customerEntity = new CustomerEntity();
BeanUtils.copyProperties(customerDTO, customerEntity);
customerRepository.save(customerEntity);
}catch(Exception e){
LOGGER.error("Method saveNewCustormerDetails : " + e.getMessage(), e);
storeFailCustomerSaveDetails(customerDTO, e);
throw e;
}
}
private void storeFailCustomerSaveDetails(CustomerDTO customerDTO, Exception ex){
try{
CustomerSaveFailsEntity customerSaveFailsEntity = new CustomerSaveFailsEntity(customerDTO.getContact(), e.getMessage());
customerSaveFailsRepository.save(customerSaveFailsEntity);
}catch(Exception e){
LOGGER.error("Method storeFailCustomerSaveDetails : " + e.getMessage() ,e);
}
}
}