




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、使用場(chǎng)景舉例在了解Transactional怎么用之前我們必須要先知道Transactional有什么用。下面舉個(gè)栗子:比如一個(gè)部門里面有很多成員,這兩者分別保存在部門表和成員表里面,在刪除某個(gè)部門的時(shí)候,假設(shè)我們默認(rèn)刪除對(duì)應(yīng)的成員。但是在執(zhí)行的時(shí)候可能會(huì)出現(xiàn)這種情況,我們先刪除部門,再刪除成員,但是部門刪除成功了,刪除成員的時(shí)候出異常了。這時(shí)候我們希望如果成員刪除失敗了,之前刪除的部門也取消刪除。這種場(chǎng)景就可以使用Transactional事物回滾。二、checked異常和unchecked異常這里之所以讓大家清楚checked異常和unchecked異常概念,是因?yàn)椋篠pring使用聲明式事務(wù)處理,默認(rèn)情況下,如果被注解的數(shù)據(jù)庫操作方法中發(fā)生了unchecked異常,所有的數(shù)據(jù)庫操作將rollback;如果發(fā)生的異常是checked異常,默認(rèn)情況下數(shù)據(jù)庫操作還是會(huì)提交的。checked異常:表示無效,不是程序中可以預(yù)測(cè)的。比如無效的用戶輸入,文件不存在,網(wǎng)絡(luò)或者數(shù)據(jù)庫鏈接錯(cuò)誤。這些都是外在的原因,都不是程序內(nèi)部可以控制的。必須在代碼中顯式地處理。比如try-catch塊處理,或者給所在的方法加上throws說明,將異常拋到調(diào)用棧的上一層。繼承自java.lang.Exception(java.lang.RuntimeException除外)。unchecked異常:表示錯(cuò)誤,程序的邏輯錯(cuò)誤。是RuntimeException的子類,比如IllegalArgumentException, NullPointerException和IllegalStateException。不需要在代碼中顯式地捕獲unchecked異常做處理。繼承自java.lang.RuntimeException(而java.lang.RuntimeException繼承自java.lang.Exception)??聪旅娴漠惓=Y(jié)構(gòu)圖或許層次感更加深些:三、Transactional的使用實(shí)例本實(shí)例采用的是Eclipse+maven,maven只是作為jar管理,即便不了解的maven的猿友也可以讀懂。3.1、spring的配置文件里面必須先配置tx名字空間如下:為了使用基于Transactional的事務(wù)管理,需要在Spring中進(jìn)行如下的配置: 博主的整個(gè)spring配置文件: classpath:properties/*.properties !- - $jdbc_driverClassName $jdbc_url $jdbc_username $jdbc_password !- - 3.2、使用Transactional,在添加用戶實(shí)現(xiàn)類方法加上注解Transactional(propagation=Propagation.REQUIRED)public void addUser(User user) userDao.addUser(user); String string = null; if(string.equals() int i = 0; 上面的方法我故意讓其出現(xiàn)空指針異常,會(huì)事物回滾3.3、運(yùn)行單元測(cè)試類Test public void addUserTest() User user = new User(); user.setUserName(luoguohui1); user.setUserPassword(luoguohui1); userService.addUser(user);發(fā)現(xiàn)無法插入進(jìn)去,但是如果把Transactional去掉,即代碼如下,雖然出現(xiàn)異常,但是數(shù)據(jù)庫中還是有添加對(duì)應(yīng)數(shù)據(jù)的:3.4、源碼下載本文的工程是在mybatis入門(含實(shí)例教程和源碼)的基礎(chǔ)上修改的,該文包含了數(shù)據(jù)庫腳本及工程搭建的詳細(xì)流程。本文最終源碼下載:/detail/u013142781/9381184四、Spring中的Transactional必須要了解的概念Spring中的Transactional基于動(dòng)態(tài)代理的機(jī)制,提供了一種透明的事務(wù)管理機(jī)制,方便快捷解決在開發(fā)中碰到的問題。一般使用是通過如下代碼對(duì)方法或接口或類注釋:Transactional(propagation=Propagation.NOT_SUPPORTED)Propagation支持7種不同的傳播機(jī)制:REQUIRED:如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟一個(gè)新的事務(wù)。SUPPORTS: 如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。但是對(duì)于事務(wù)同步的事務(wù)管理器,PROPAGATION_SUPPORTS與不使用事務(wù)有少許不同。NOT_SUPPORTED:總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù)。REQUIRESNEW:總是開啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則將這個(gè)存在的事務(wù)掛起。MANDATORY:如果已經(jīng)存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有一個(gè)活動(dòng)的事務(wù),則拋出異常。NEVER:總是非事務(wù)地執(zhí)行,如果存在一個(gè)活動(dòng)事務(wù),則拋出異常NESTED:如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中。如果沒有活動(dòng)事務(wù),則按REQUIRED屬性執(zhí)行。 在需要事務(wù)管理的地方加Transactional 注解。Transactional 注解可以被應(yīng)用于接口定義和接口方法、類定義和類的 public 方法上。 Transactional 注解只能應(yīng)用到 public 可見度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 Transactional 注解,它也不會(huì)報(bào)錯(cuò), 但是這個(gè)被注解的方法將不會(huì)展示已配置的事務(wù)設(shè)置。 注意僅僅 Transactional 注解的出現(xiàn)不足于開啟事務(wù)行為,它僅僅 是一種元數(shù)據(jù)。必須在配置文件中使用配置元素,才真正開啟了事務(wù)行為。 通過 元素的 “proxy-target-class” 屬性值來控制是基于接口的還是基于類的代理被創(chuàng)建。如果 “proxy-target-class” 屬值被設(shè)置為 “true”,那么基于類的代理將起作用(這時(shí)需要CGLIB庫cglib.jar在CLASSPATH中)。如果 “proxy-target-class” 屬值被設(shè)置為 “false” 或者這個(gè)屬性被省略,那么標(biāo)準(zhǔn)的JDK基于接口的代理將起作用。 Spring團(tuán)隊(duì)建議在具體的類(或類的方法)上使用 Transactional 注解,而不要使用在類所要實(shí)現(xiàn)的任何接口上。在接口上使用 Transactional 注解,只能當(dāng)你設(shè)置了基于接口的代理時(shí)它才生效。因?yàn)樽⒔?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年人教版(PEP)三下英語期末模擬卷(含答案含聽力原文無音頻)
- 《金融服務(wù)營(yíng)銷》 測(cè)試題及答案A
- 工業(yè)廢水處理與排放標(biāo)準(zhǔn)環(huán)境監(jiān)測(cè)研究
- 工業(yè)機(jī)器人應(yīng)用及操作規(guī)范介紹
- 工業(yè)旅游開發(fā)與文化傳承研究
- 工業(yè)機(jī)器人技術(shù)及智能制造應(yīng)用案例
- 工業(yè)污染防治與清潔生產(chǎn)技術(shù)
- 工業(yè)物聯(lián)網(wǎng)提升非標(biāo)設(shè)備運(yùn)行效率的策略
- 工業(yè)污染防治技術(shù)及措施
- 工業(yè)污染防治的技術(shù)與策略
- 預(yù)防艾梅乙母嬰傳播知識(shí)
- 總監(jiān)述職報(bào)告
- 兒童意外傷害預(yù)防及家庭安全教育推廣研究報(bào)告
- 國(guó)家開放大學(xué)本科《當(dāng)代中國(guó)政治制度》期末紙質(zhì)考試總題庫2025春期版
- 滴滴網(wǎng)約車出行品牌-品牌視覺識(shí)別手冊(cè)【出行打車】【VI設(shè)計(jì)】
- 課題申報(bào)參考:中華體育精神鑄牢新疆青年學(xué)生中華民族共同體意識(shí)的時(shí)代價(jià)值和實(shí)踐路徑研究
- 臨床生化檢驗(yàn)講課
- 生物制造產(chǎn)業(yè)園項(xiàng)目實(shí)施規(guī)劃與進(jìn)度安排
- 蒸飯培訓(xùn)課件
- 高校物業(yè)管理服務(wù)實(shí)施方案
- 工程造價(jià)咨詢服務(wù)投標(biāo)方案(專家團(tuán)隊(duì)版-)
評(píng)論
0/150
提交評(píng)論