我的服务类。
@Service
@Transactional(value = "transactionManager", readOnly = true, propagation = Propagation.REQUIRED)
public class DeviceServiceImpl{
@Transactional(readOnly = false)
public void blockAllDevices(){
createSmsDeviceBlock();
}
public void createSmsDeviceBlock(){
addToLogTables();
smsService.sendSms();
}
@Transactional(readOnly = false,propagation = Propagation.REQUIRES_NEW)
public void addToLogTables(){
try {
//save object with DAO methods...
} catch (Exception e) {
throw new ServiceException(ServiceException.PROCESSING_FAILED, e.getMessage(), e);
}
}
}
从我的控制器,服务方法 blockAllDevices() 被调用。addToLogTables() 方法被标记为 Propergation.REQUIRED_NEW,但问题在于 addToLogTables() 方法没有创建新事务并且正在使用现有事务。
我想做的是, addToLogTables() 方法上的事务应该在执行 smsService.sendSms() 方法之前提交。
我的问题在这里,如果事务提交失败,在方法 addToLogTables() 方法上,它不应该执行 smsService.sendSms() 方法。