成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

javaspring嵌套事務(wù)和事務(wù)傳播類型怎么理解

本篇內(nèi)容主要講解“java spring嵌套事務(wù)和事務(wù)傳播類型怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“java spring嵌套事務(wù)和事務(wù)傳播類型怎么理解”吧!

創(chuàng)新互聯(lián)公司2013年至今,先為川匯等服務(wù)建站,川匯等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為川匯企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一個有事務(wù)的方法,去調(diào)用另一個有事務(wù)的方法,會怎么樣?

一個沒有事務(wù)的方法,去調(diào)用一個有事務(wù)的方法,會怎么樣?

多事務(wù)嵌套問題解答

1、在同一個類中,一個無事務(wù)方法調(diào)用另一個有事務(wù)注解方法(比如@Async,@Transational)的方法,注解事務(wù)是不會生效的

2、在同一個類中,一個有事務(wù)方法調(diào)用另一個有事務(wù)注解方法(比如@Async,@Transational)的方法,只有外層事務(wù)有效,被調(diào)的注解事務(wù)是不會生效的

3、在不同類中,一個無事務(wù)方法調(diào)用另一個有事務(wù)注解方法(比如@Async,@Transational)的方法,有注解事務(wù)是生效的

4、在不同類中,一個有事務(wù)方法調(diào)用另一個有事務(wù)注解方法(比如@Async,@Transational)的方法,兩個方法都有事務(wù)

代碼示例:

@Service

public class PersonServiceImpl implements PersonService {

@Autowired

PersonDao personDao;

@Override

@Transactional

public boolean addPerson(Person person) {

boolean result = personDao.insertPerson(person)>0 ? true : false;

return result;

}

@Override

@Transactional

public boolean updatePersonByPhoneNo(Person person) {

boolean result = personDao.updatePersonByPhoneNo(person)>0 ? true : false;

addPerson(person); //測試同一個類中@Transactional是否起作用

return result;

}

}

上述的情況,說白了,就是在一個Service內(nèi)部,事務(wù)方法之間的嵌套調(diào)用,不管被調(diào)用普通方法和事務(wù)方法,都不會開啟新的事務(wù)!鄭州哪家人流醫(yī)院好 http://www.gz020zj.com/

spring 在掃描bean的時候會掃描方法上是否包含@Transactional注解,如果包含,spring會為這個bean動態(tài)地生成一個類(即代理類,proxy),代理類是繼承原來那個bean的。此時,當(dāng)這個有注解的方法被調(diào)用的時候,實際上是由代理類來調(diào)用的,代理類在調(diào)用之前就會啟動transaction。然而,如果這個有注解的方法是被同一個類中的其他方法調(diào)用的,那么該方法的調(diào)用并沒有通過代理類,而是直接通過原來的那個bean,所以就不會啟動transaction,我們看到的現(xiàn)象就是@Transactional注解無效。

總結(jié):spring采用動態(tài)代理機制來實現(xiàn)事務(wù)控制,動態(tài)代理最終都是要調(diào)用原始對象的,而原始對象在去調(diào)用方法時,是不會再觸發(fā)代理了!

重點:自己也可以實現(xiàn)一個事務(wù),原理就是AOP中的動態(tài)代理

解決的嵌套事務(wù)方法就簡單了(兩種):

把這兩個方法分開到不同的類中,把注解加到類名上面;

Spring事務(wù)7種傳播屬性:

REQUIRED(require)默認(rèn)級別:不存在事務(wù)則創(chuàng)建一個事務(wù)

REQUIRES_NEW(requires_new):新建一個自己的事務(wù),不論當(dāng)前是否存在事務(wù),已存在的事務(wù)掛起

NESTED(nested):存在事務(wù)則運行在嵌套事務(wù)中,不管是調(diào)用者還是被調(diào)用者不存在則創(chuàng)建一個事務(wù)

SUPPORTS(supports):存在事務(wù)則加入,不存在也可以

NOT_SUPPORT(not_support):以非事務(wù)方式運行,如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起

MANDATORY(mandatory):如果當(dāng)前存在事務(wù),則運行在當(dāng)前事務(wù)中,如果當(dāng)前無事務(wù),則拋出異常,也即父級方法必須有事務(wù)

NEVER(never):當(dāng)前方法不能運行在事務(wù)中,存在事務(wù)則拋出異常

代碼中實現(xiàn):

@Override

@Transactional(propagation = Propagation.REQUIRED)

public void addEmpByRequired(String name) {

Employee employee = new Employee();

employee.setDeptId(1);

employee.setName(name);

employee.setAddress("邯鄲");

employeeMapper.insertSelective(employee);

departmentService.addDept("jishubu");

int i = 1/0;

}

到此,相信大家對“java spring嵌套事務(wù)和事務(wù)傳播類型怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享標(biāo)題:javaspring嵌套事務(wù)和事務(wù)傳播類型怎么理解
文章來源:http://jinyejixie.com/article8/pshjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化網(wǎng)站策劃、網(wǎng)頁設(shè)計公司電子商務(wù)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
鹿泉市| 北川| 柳林县| 平顺县| 河西区| 个旧市| 凤翔县| 自贡市| 新干县| 宣威市| 田阳县| 鹤庆县| 博罗县| 右玉县| 永川市| 栾城县| 临朐县| 洛南县| 英超| 平和县| 岑巩县| 襄汾县| 平顶山市| 德昌县| 横山县| 奈曼旗| 土默特左旗| 兴和县| 容城县| 丹寨县| 平塘县| 韶山市| 唐河县| 宜阳县| 抚远县| 彭阳县| 秭归县| 布尔津县| 灵寿县| 罗江县| 伊春市|