@Transactional 會給一個方法添加事務,添加了該注解在程序異常時會進度sql回滾。
但有的時候想要在本次事務中讀取本次事務中發生了變化的的數據,但由於本次事務還未提交導致讀取不到,這時候可以考慮使用手動事務。先進行一次提交在手動開啟事務。
手動事務 注入兩個bean
@Autowired
DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
手動開啟事務
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
手動提交事務
dataSourceTransactionManager.commit(transactionStatus);//提交
手動回滾事務
dataSourceTransactionManager.rollback(transactionStatus);//最好是放在catch 里面,防止程序異常而事務一直卡在哪里未提交