国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題

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

2022-03-07 00:54weixin_33976072 Java教程

這篇文章主要介紹了Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題,本文給大家分享問題原因及解決辦法,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

  • PROPAGATION_REQUIRED: 如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟事務(wù);
  • PROPAGATION_REQUIRES_NEW:總是開啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則將這個(gè)存在的事務(wù)掛起;

問題:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Service
public class EmployeeService {
 
    @Autowired
    private EmployeeDao employeeDao;
 
    public void save(){
        try {       
            this.saveEmployee();  //此處this調(diào)用不會(huì)開啟事務(wù),數(shù)據(jù)會(huì)被保存
        }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的動(dòng)態(tài)代理。只有被動(dòng)態(tài)代理直接調(diào)用時(shí)才會(huì)產(chǎn)生事務(wù)。在SpringIoC容器中返回的調(diào)用的對(duì)象是代理對(duì)象而不是真實(shí)的對(duì)象。而這里的this是EmployeeService真實(shí)對(duì)象而不是代理對(duì)象。

解決辦法:

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

?
1
2
3
4
5
6
7
8
9
@Transactional() //開啟事務(wù)
public void save(){
    try {       
        this.saveEmployee();  //這里this調(diào)用會(huì)使事務(wù)失效,數(shù)據(jù)會(huì)被保存
    }catch (Exception e){
        e.printStackTrace();
        throw new RuntimeException();
    }
}

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

?
1
2
3
4
5
6
7
8
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)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/weixin_33976072/article/details/88113917

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产一区二区三区性色av | 欧美在线播放一区 | www.xxx日韩| 亚洲成人一区二区三区 | 在线国产一区二区 | 国产精品永久 | 欧美日韩在线一区 | 亚洲aaa| 亚洲国产精品成人 | 天堂精品久久 | 国产一区免费 | 黑人中文字幕一区二区三区 | 精品久久久久久亚洲精品 | 日韩国产欧美 | 亚洲精品永久免费 | 免费a级毛片在线观看 | 免费一区二区三区 | 99伊人网 | 羞羞视频网| 国产人成精品一区二区三 | 欧美一级精品片在线看 | 国产成年免费视频 | 日韩中文字幕视频 | 婷婷久久综合九色综合绿巨人 | 最好的2019中文大全在线观看 | 成人免费看 | 日韩三级在线 | 四虎综合网 | 最近高清无吗免费看 | 欧美一区二区在线视频 | 99在线热视频 | 国产精品美女久久久久久免费 | 一区二区三区在线播放 | 午夜黄色影院 | 亚洲欧美影院 | 一本亚洲 | 精品一区二区三区四区五区 | 日韩精品免费一区二区夜夜嗨 | 午夜国产在线 | 91精品视频一区 | 欧美在线视频一区二区 |