Spring事務(wù)中的事務(wù)傳播行為使用方式詳解
1. REQUIRED 傳播行為
REQUIRED是Spring事務(wù)管理的默認(rèn)傳播行為。如果當(dāng)前沒(méi)有事務(wù),則新的事務(wù)將被開(kāi)啟;如果當(dāng)前存在事務(wù),則方法將參與到當(dāng)前事務(wù)中。下面是REQUIRED傳播行為的使用方式:
@Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; @Override public void updateUser(User user) { // 具體業(yè)務(wù)邏輯 } @Override @Transactional(propagation = Propagation.REQUIRED) public void transferMoney(int fromUserId, int toUserId, double amount) { User fromUser = userDao.getUserById(fromUserId); User toUser = userDao.getUserById(toUserId); double fromUserBalance = fromUser.getBalance(); if(fromUserBalance < amount){ throw new RuntimeException("余額不足"); } fromUser.setBalance(fromUserBalance - amount); toUser.setBalance(toUser.getBalance() + amount); userDao.updateUser(fromUser); userDao.updateUser(toUser); } }
2. REQUIRES_NEW 傳播行為
REQUIRES_NEW表示當(dāng)前方法必須開(kāi)啟新的事務(wù),并掛起當(dāng)前事務(wù)(如果存在)。下面是REQUIRES_NEW傳播行為的使用方式:
@Service @Transactional public class OrderServiceImpl implements OrderService{ @Autowired private OrderDao orderDao; @Override public void createOrder(Order order) { // 具體業(yè)務(wù)邏輯 } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void updateOrderStatus(int orderId, int status) { Order order = orderDao.getOrderById(orderId); order.setStatus(status); orderDao.updateOrder(order); } }
3. SUPPORTS 傳播行為
SUPPORTS表示當(dāng)前方法支持參與到一個(gè)已經(jīng)存在的事務(wù)中,如果當(dāng)前沒(méi)有事務(wù),則以非事務(wù)方式執(zhí)行。下面是SUPPORTS傳播行為的使用方式:
@Service @Transactional public class LogServiceImpl implements LogService{ @Autowired private LogDao logDao; @Override public void addLog(Log log) { // 具體業(yè)務(wù)邏輯 } @Override @Transactional(propagation = Propagation.SUPPORTS) public void deleteLog(int logId) { logDao.deleteLog(logId); } }
4. NOT_SUPPORTED 傳播行為
NOT_SUPPORTED表示當(dāng)前方法以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則掛起該事務(wù)。下面是NOT_SUPPORTED傳播行為的使用方式:
@Service @Transactional public class ProductService{ @Autowired private ProductDao productDao; @Transactional(propagation = Propagation.NOT_SUPPORTED) public void updateProductStock(int productId, int quantity){ // 具體業(yè)務(wù)邏輯 } }
5. NEVER 傳播行為
NEVER表示當(dāng)前方法以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。下面是NEVER傳播行為的使用方式:
@Service @Transactional public class OrderServiceImpl implements OrderService{ @Autowired private OrderDao orderDao; @Override public void createOrder(Order order) { // 具體業(yè)務(wù)邏輯 } @Override @Transactional(propagation = Propagation.NEVER) public void deleteOrder(int orderId) { Order order = orderDao.getOrderById(orderId); orderDao.deleteOrder(order); } }
Spring事務(wù)管理中的事務(wù)傳播行為對(duì)于設(shè)計(jì)和管理復(fù)雜的事務(wù)場(chǎng)景非常重要。本文詳細(xì)介紹了幾種常用的事務(wù)傳播行為,并提供了相應(yīng)的代碼示例。開(kāi)發(fā)者可以根據(jù)實(shí)際需求選擇合適的事務(wù)傳播行為,從而實(shí)現(xiàn)事務(wù)的管理與控制。
通過(guò)對(duì)Spring事務(wù)中事務(wù)傳播行為的深入理解,開(kāi)發(fā)者可以更好地設(shè)計(jì)和管理事務(wù),提高應(yīng)用程序的可靠性和穩(wěn)定性。在實(shí)際開(kāi)發(fā)中,根據(jù)業(yè)務(wù)需求合理選擇事務(wù)傳播行為,可以避免事務(wù)覆蓋和事務(wù)的不一致等問(wèn)題,并且提升系統(tǒng)的性能和并發(fā)能力。
以上就是Spring事務(wù)中的事務(wù)傳播行為使用方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring事務(wù)傳播行為的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件
本文主要介紹了springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03淺析Java如何優(yōu)雅的設(shè)計(jì)接口狀態(tài)碼和異常
HTTP協(xié)議里定義了一系列的狀態(tài)碼用來(lái)表明請(qǐng)求的狀態(tài),如常用的200表示請(qǐng)求正常,404表示請(qǐng)求的資源不存在,所以本文就來(lái)和大家討論一下如何優(yōu)雅的設(shè)計(jì)接口狀態(tài)碼和異常,感興趣的可以了解下2024-03-03Springboot整合Rabbitmq之Confirm和Return機(jī)制
這篇文章主要介紹了Springboot整合Rabbitmq之Confirm和Return詳解,本篇重點(diǎn)進(jìn)行Confirm?機(jī)制和Return?機(jī)制的實(shí)現(xiàn)和說(shuō)明,通過(guò)實(shí)例代碼相結(jié)合給大家詳細(xì)介紹,對(duì)Springboot整合Rabbitmq相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)
這篇文章主要介紹了java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06ConditionalOnProperty配置swagger不生效問(wèn)題及解決
這篇文章主要介紹了ConditionalOnProperty配置swagger不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06一文詳解Spring任務(wù)執(zhí)行和調(diào)度(小結(jié))
這篇文章主要介紹了一文詳解Spring任務(wù)執(zhí)行和調(diào)度(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08