欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效

 更新時(shí)間:2024年08月19日 10:50:11   作者:MiracleSang  
這篇文章主要介紹了如何解決Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效

問題現(xiàn)象

package cn.sw.study.web.service.impl;
import cn.sw.study.web.dao.UserMapper;
import cn.sw.study.web.model.User;
import cn.sw.study.web.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;

/**
 * 用戶業(yè)務(wù)類
 */
@Service
public class UserServiceImpl implements UserService{

    @Autowired
    UserMapper userMapper;

    public void addInfo() {
        addOne();
    }

    @Transactional
    public void addOne() {
        User record = new User();
        record.setLoginName("tom");
        record.setPwd("111111");
        record.setMobile("13913913913");
        record.setUsable(1);
        record.setCreateTime(new Date());
        userMapper.insertSelective(record);
        int i = 1/0;    // 測試事務(wù)的回滾
    }
}

如果從外部類直接調(diào)用addOne方法,則事務(wù)是可以正常生效的。

此時(shí)addInfo方法上沒有事務(wù)注解,addOne方法上有事務(wù)注解,運(yùn)行addInfo調(diào)用addOne方法,不會(huì)產(chǎn)生事務(wù),測試數(shù)據(jù)遇到異常沒有回滾。

問題原因

在默認(rèn)情況下,大部分使用spring的事務(wù)都是使用代理的模式,代理實(shí)現(xiàn)的事務(wù)有一定的局限性:

僅有在公有方法上標(biāo)記的@Transactional有效;

僅有外部方法調(diào)用過程才會(huì)被代理截獲,事務(wù)才會(huì)有效,也就是說,一個(gè)方法調(diào)用本對(duì)象的另一個(gè)方法,沒有通過代理類,事務(wù)也就無法生效。

解決辦法

手動(dòng)獲取代理類之后再調(diào)用

((UserServiceImpl)AopContext.currentProxy()).addOne();

問題解決!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Servlet Filter過濾器執(zhí)行順序

    Servlet Filter過濾器執(zhí)行順序

    這篇文章主要介紹了Servlet Filter過濾器執(zhí)行順序的相關(guān)資料,幫助大家更好的理解為什么要用過濾器,感興趣的朋友可以了解下
    2020-12-12
  • Java使用CompletableFuture進(jìn)行非阻塞IO詳解

    Java使用CompletableFuture進(jìn)行非阻塞IO詳解

    這篇文章主要介紹了Java使用CompletableFuture進(jìn)行非阻塞IO詳解,CompletableFuture是Java中的一個(gè)類,用于支持異步編程和處理異步任務(wù)的結(jié)果,它提供了一種方便的方式來處理異步操作,并允許我們以非阻塞的方式執(zhí)行任務(wù),需要的朋友可以參考下
    2023-09-09
  • spring動(dòng)態(tài)注冊(cè)bean?AOP失效原理解析

    spring動(dòng)態(tài)注冊(cè)bean?AOP失效原理解析

    這篇文章主要為大家介紹了spring動(dòng)態(tài)注冊(cè)bean使AOP失效原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • mybatis如何處理返回結(jié)果集

    mybatis如何處理返回結(jié)果集

    這篇文章主要介紹了mybatis如何處理返回結(jié)果集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java Runtime如何執(zhí)行多條命令

    java Runtime如何執(zhí)行多條命令

    這篇文章主要介紹了java Runtime如何執(zhí)行多條命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)

    Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)

    本文主要介紹Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)的內(nèi)容,感興趣的小伙伴可以參考下文
    2021-08-08
  • Java開發(fā)常用類庫之Hutool詳解

    Java開發(fā)常用類庫之Hutool詳解

    這篇文章主要介紹了Java開發(fā)常用類庫之Hutool,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring Boot Shiro在Web應(yīng)用中的作用詳解

    Spring Boot Shiro在Web應(yīng)用中的作用詳解

    這篇文章主要為大家介紹了Spring Boot Shiro在Web應(yīng)用中的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java并發(fā)編程之ConcurrentLinkedQueue解讀

    Java并發(fā)編程之ConcurrentLinkedQueue解讀

    這篇文章主要介紹了Java并發(fā)編程之ConcurrentLinkedQueue解讀,非阻塞的實(shí)現(xiàn)方式則可以使用循環(huán)CAS的方式來實(shí)現(xiàn),而ConcurrentLinkedQueue就是juc包中自帶的經(jīng)典非堵塞方式實(shí)現(xiàn)的工具類,需要的朋友可以參考下
    2023-12-12
  • Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    這篇文章主要介紹了Linux中Java開發(fā)常用軟件安裝方法總結(jié),需要的朋友可以參考下
    2020-02-02

最新評(píng)論