我的服務類。春季交易管理Propagation.REQUIRES_NEW不起作用
@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()方法。
我可以理解這一點,但有沒有其他辦法可以做到這一點...? 這就是在同一個內部創建新的交易。 –
您必須從外部或編輯器進行調用,以便事務性方法位於您注入其中的某個其他bean上。 –
您可以使用基於AspectJ的事務管理和加載時間或編譯時編織和彈簧方面,這允許您進行事務性自調用,私有事務方法等。查看Spring文檔以獲取更多信息。 – Jukka