最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題

 更新時間:2021年10月31日 09:07:32   作者:weixin_33976072  
這篇文章主要介紹了Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題,本文給大家分享問題原因及解決辦法,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
  • PROPAGATION_REQUIRED: 如果存在一個事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟事務(wù);
  • PROPAGATION_REQUIRES_NEW:總是開啟一個新的事務(wù)。如果一個事務(wù)已經(jīng)存在,則將這個存在的事務(wù)掛起;

問題:

Spring中一個沒有事務(wù)的方法A調(diào)用一個默認(rèn)事務(wù)(PROPAGATION_REQUIRED)的方法B時,如果使用this調(diào)用方法B,方法B拋出RuntimeException,此時方法B事務(wù)未生效,不會回滾。

@Service
public class EmployeeService {
 
    @Autowired
    private EmployeeDao employeeDao;
 
    public void save(){
        try {        
            this.saveEmployee();  //此處this調(diào)用不會開啟事務(wù),數(shù)據(jù)會被保存
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    
    @Transactional(propagation = Propagation.PROPAGATION_REQUIRED)
    //此處無論是PROPAGATION_REQUIRED還是PROPAGATION_REQUIRES_NEW,事務(wù)均不生效
    public void saveEmployee(){
        Employee employee = new Employee();
        employee.setName("zhangsan");
        employee.setAge("26";
        employeeDao.save(employee);
        throw new RuntimeException();
    }
}

問題原因:

JDK的動態(tài)代理。只有被動態(tài)代理直接調(diào)用時才會產(chǎn)生事務(wù)。在SpringIoC容器中返回的調(diào)用的對象是代理對象而不是真實的對象。而這里的this是EmployeeService真實對象而不是代理對象。

解決辦法:

方法1、在方法A上開啟事務(wù),方法B不用事務(wù)或默認(rèn)事務(wù),并在方法A的catch中throw new RuntimeException();(在沒指定rollbackFor時,默認(rèn)回滾的異常為RuntimeException),這樣使用的就是方法A的事務(wù)。(一定要throw new RuntimeException();否則異常被捕捉處理,同樣不會回滾。)如下:

@Transactional() //開啟事務(wù)
public void save(){
    try {        
        this.saveEmployee();  //這里this調(diào)用會使事務(wù)失效,數(shù)據(jù)會被保存
    }catch (Exception e){
        e.printStackTrace();
        throw new RuntimeException();
    }
}

方法2、方法A上可以不開啟事務(wù),方法B上開啟事務(wù),并在方法A中將this調(diào)用改成動態(tài)代理調(diào)用(AopContext.currentProxy()),如下:

public void save(){
    try {        
        EmployeeService proxy =(EmployeeService) AopContext.currentProxy();
        proxy.saveEmployee();
    }catch (Exception e){
        e.printStackTrace();
    }
}

到此這篇關(guān)于spring事務(wù)調(diào)用失效問題的文章就介紹到這了,更多相關(guān)spring事務(wù)調(diào)用失效問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)微信點餐申請微信退款

    java實現(xiàn)微信點餐申請微信退款

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)微信點餐申請微信退款,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • JavaWeb利用郵箱幫用戶找回密碼

    JavaWeb利用郵箱幫用戶找回密碼

    這篇文章主要為大家詳細(xì)介紹了JavaWeb利用郵箱幫用戶找回密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • RabbitMQ簡單隊列實例及原理解析

    RabbitMQ簡單隊列實例及原理解析

    這篇文章主要介紹了RabbitMQ簡單隊列實例及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP代碼案例

    注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP代碼案例

    這篇文章主要介紹了注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP的方法介紹,文中有詳細(xì)的代碼示例,對我們的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • java md5工具類分享

    java md5工具類分享

    這篇文章主要介紹了java的md5工具類,需要的朋友可以參考下
    2014-02-02
  • Java實現(xiàn)批量合并Excel工作表

    Java實現(xiàn)批量合并Excel工作表

    這篇文章主要為大家詳細(xì)介紹了如何使用Java快速實現(xiàn)批量Excel工作表的合并,文中的示例代碼代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • SpringBoot使用Nacos配置中心的實現(xiàn)

    SpringBoot使用Nacos配置中心的實現(xiàn)

    這篇文章主要介紹了SpringBoot使用Nacos配置中心的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java之單例模式實現(xiàn)方案詳解

    Java之單例模式實現(xiàn)方案詳解

    這篇文章主要介紹了Java之單例模式實現(xiàn)方案詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析

    Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析

    這篇文章主要介紹了Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • spring redis 如何實現(xiàn)模糊查找key

    spring redis 如何實現(xiàn)模糊查找key

    這篇文章主要介紹了spring redis 如何實現(xiàn)模糊查找key的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

修武县| 恩施市| 牙克石市| 虞城县| 宿迁市| 天峨县| 聂拉木县| 金门县| 阿克| 沐川县| 大埔县| 衡山县| 连云港市| 武安市| 河间市| 十堰市| 涞源县| 敖汉旗| 邢台市| 定边县| 分宜县| 盐津县| 辽阳县| 定安县| 织金县| 黑山县| 小金县| 伊通| 永嘉县| 新宾| 亚东县| 旌德县| 临高县| 长顺县| 荥阳市| 建昌县| 郑州市| 都匀市| 内丘县| 庐江县| 施甸县|