Spring事務(wù)中的事務(wù)傳播行為使用方式詳解
1. REQUIRED 傳播行為
REQUIRED是Spring事務(wù)管理的默認(rèn)傳播行為。如果當(dāng)前沒有事務(wù),則新的事務(wù)將被開啟;如果當(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)前方法必須開啟新的事務(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)前沒有事務(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)的代碼示例。開發(fā)者可以根據(jù)實(shí)際需求選擇合適的事務(wù)傳播行為,從而實(shí)現(xiàn)事務(wù)的管理與控制。
通過對(duì)Spring事務(wù)中事務(wù)傳播行為的深入理解,開發(fā)者可以更好地設(shè)計(jì)和管理事務(wù),提高應(yīng)用程序的可靠性和穩(wěn)定性。在實(shí)際開發(fā)中,根據(jù)業(yè)務(wù)需求合理選擇事務(wù)傳播行為,可以避免事務(wù)覆蓋和事務(wù)的不一致等問題,并且提升系統(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ù)到日志文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
淺析Java如何優(yōu)雅的設(shè)計(jì)接口狀態(tài)碼和異常
HTTP協(xié)議里定義了一系列的狀態(tài)碼用來表明請(qǐng)求的狀態(tài),如常用的200表示請(qǐng)求正常,404表示請(qǐng)求的資源不存在,所以本文就來和大家討論一下如何優(yōu)雅的設(shè)計(jì)接口狀態(tài)碼和異常,感興趣的可以了解下2024-03-03
Springboot整合Rabbitmq之Confirm和Return機(jī)制
這篇文章主要介紹了Springboot整合Rabbitmq之Confirm和Return詳解,本篇重點(diǎn)進(jìn)行Confirm?機(jī)制和Return?機(jī)制的實(shí)現(xiàn)和說明,通過實(shí)例代碼相結(jié)合給大家詳細(xì)介紹,對(duì)Springboot整合Rabbitmq相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02
java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)
這篇文章主要介紹了java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06
ConditionalOnProperty配置swagger不生效問題及解決
這篇文章主要介紹了ConditionalOnProperty配置swagger不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
一文詳解Spring任務(wù)執(zhí)行和調(diào)度(小結(jié))
這篇文章主要介紹了一文詳解Spring任務(wù)執(zhí)行和調(diào)度(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

