黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java面試題集:JavaSpring事務(wù)常見面試

Java面試題集:JavaSpring事務(wù)常見面試

更新時間:2019-11-12 14:56:21 來源:動力節(jié)點 瀏覽2359次



Java常見面試題匯總.jpg

  Spring和事務(wù)的關(guān)系


  關(guān)系型數(shù)據(jù)庫、某些消息隊列等產(chǎn)品或中間件稱為事務(wù)性資源,因為它們本身支持事務(wù),也能夠處理事務(wù)。


  Spring很顯然不是事務(wù)性資源,但是它可以管理事務(wù)性資源,所以Spring和事務(wù)之間是管理關(guān)系。


  就像JackMa雖然不會寫代碼,但是他卻管理者一大批會寫代碼的碼農(nóng)。


  Spring事務(wù)三要素


  數(shù)據(jù)源:表示具體的事務(wù)性資源,是事務(wù)的真正處理者,如MySQL等。


  事務(wù)管理器:像一個大管家,從整體上管理事務(wù)的處理過程,如打開、提交、回滾等。


  事務(wù)應(yīng)用和屬性配置:像一個標識符,表明哪些方法要參與事務(wù),如何參與事務(wù),以及一些相關(guān)屬性如隔離級別、超時時間等。


  Spring事務(wù)的注解配置


  把一個DataSource(如DruidDataSource)作為一個@Bean注冊到Spring容器中,配置好事務(wù)性資源。


  把一個@EnableTransactionManagement注解放到一個@Configuration類上,配置好事務(wù)管理器,并啟用事務(wù)管理。


  把一個@Transactional注解放到類上或方法上,可以設(shè)置注解的屬性,表明該方法按配置好的屬性參與到事務(wù)中。


  事務(wù)注解的本質(zhì)


  @Transactional這個注解僅僅是一些(和事務(wù)相關(guān)的)元數(shù)據(jù),在運行時被事務(wù)基礎(chǔ)設(shè)施讀取消費,并使用這些元數(shù)據(jù)來配置bean的事務(wù)行為。


  大致來說具有兩方面功能,一是表明該方法要參與事務(wù),二是配置相關(guān)屬性來定制事務(wù)的參與方式和運行行為。


  Spring聲明式事務(wù)實現(xiàn)原理


  聲明式事務(wù)成為可能,主要得益于SpringAOP。使用一個事務(wù)攔截器,在方法調(diào)用的前后/周圍進行事務(wù)性增強(advice),來驅(qū)動事務(wù)完成。


  如何回滾一個事務(wù)


  就是在一個事務(wù)上下文中當前正在執(zhí)行的代碼里拋出一個異常,事務(wù)基礎(chǔ)設(shè)施代碼會捕獲任何未處理的異常,并且做出決定是否標記這個事務(wù)為回滾。


  默認回滾規(guī)則


  默認只把runtime,uncheckedexceptions標記為回滾,即RuntimeException及其子類,Error默認也導致回滾。Checkedexceptions默認不導致回滾。這些規(guī)則和EJB是一樣的。


  如何配置回滾異常


  使用@Transactional注解的rollbackFor/rollbackForClassName屬性,可以精確配置導致回滾的異常類型,包括checkedexceptions。


  noRollbackFor/noRollbackForClassName屬性,可以配置不導致回滾的異常類型,當遇到這樣的未處理異常時,照樣提交相關(guān)事務(wù)。


  事務(wù)注解在類/方法上


  @Transactional注解既可以標注在類上,也可以標注在方法上。當在類上時,默認應(yīng)用到類里的所有方法。如果此時方法上也標注了,則方法上的優(yōu)先級高。


  事務(wù)注解在類上的繼承性


  @Transactional注解的作用可以傳播到子類,即如果父類標了子類就不用標了。但倒過來就不行了。


  子類標了,并不會傳到父類,所以父類方法不會有事務(wù)。父類方法需要在子類中重新聲明而參與到子類上的注解,這樣才會有事務(wù)。


  事務(wù)注解在接口/類上


  @Transactional注解可以用在接口上,也可以在類上。在接口上時,必須使用基于接口的代理才行,即JDK動態(tài)代理。


  事實是Java的注解不能從接口繼承,如果你使用基于類的代理,即CGLIB,或基于織入方面,即AspectJ,事務(wù)設(shè)置不會被代理和織入基礎(chǔ)設(shè)施認出來,目標對象不會被包裝到一個事務(wù)代理中。


  Spring團隊建議注解標注在類上而非接口上。


  只在public方法上生效?


  當采用代理來實現(xiàn)事務(wù)時,(注意是代理),@Transactional注解只能應(yīng)用在public方法上。當標記在protected、private、package-visible方法上時,不會產(chǎn)生錯誤,但也不會表現(xiàn)出為它指定的事務(wù)配置??梢哉J為它作為一個普通的方法參與到一個public方法的事務(wù)中。


  如果想在非public方法上生效,考慮使用AspectJ(織入方式)。


  目標類里的自我調(diào)用沒有事務(wù)?


  在代理模式中(這是默認的),只有從外部的方法調(diào)用進入通過代理會被攔截,這意味著自我調(diào)用(實際就是,目標對象中的一個方法調(diào)用目標對象的另一個方法)在運行時不會導致一個實際的事務(wù),即使被調(diào)用的方法標有注解。


  如果你希望自我調(diào)用也使用事務(wù)來包裝,考慮使用AspectJ的方式。在這種情況下,首先是沒有代理。相反,目標類被織入(即它的字節(jié)碼被修改)來把@Transactional加入到運行時行為,在任何種類的方法上都可以。


  事務(wù)與線程


  和JavaEE事務(wù)上下文一樣,Spring事務(wù)和一個線程的執(zhí)行相關(guān)聯(lián),底層是一個ThreadLocal,就是每個線程一個map,key是DataSource,value是Connection。


  邏輯事務(wù)與物理事務(wù)


  事務(wù)性資源實際打開的事務(wù)就是物理事務(wù),如數(shù)據(jù)庫的Connection打開的事務(wù)。Spring會為每個@Transactional方法創(chuàng)建一個事務(wù)范圍,可以理解為是邏輯事務(wù)。


  在邏輯事務(wù)中,大范圍的事務(wù)稱為外圍事務(wù),小范圍的事務(wù)稱為內(nèi)部事務(wù),外圍事務(wù)可以包含內(nèi)部事務(wù),但在邏輯上是互相獨立的。每一個這樣的邏輯事務(wù)范圍,都能夠單獨地決定rollback-only狀態(tài)。


  那么如何處理邏輯事務(wù)和物理事務(wù)之間的關(guān)聯(lián)關(guān)系呢,這就是傳播特性解決的問題。


  事務(wù)的傳播特性


  REQUIRED,SUPPORTS,MANDATORY,REQUIRES_NEW,NOT_SUPPORTED,NEVER,NESTED


  REQUIRED


  強制要求要有一個物理事務(wù)。如果沒有已經(jīng)存在的事務(wù),就專門打開一個事務(wù)用于當前范圍?;蛘邊⑴c到一個已存在的更大范圍的外圍事務(wù)中。在相同的線程中,這是一種很好的默認方式安排。(例如,一個service外觀/門面代理到若干個倉儲方法,所有底層資源必須參與到service級別的事務(wù)里)


  在標準的REQUIRED行為情況下,所有這樣的邏輯事務(wù)范圍映射到同一個物理事務(wù)。因此,在內(nèi)部事務(wù)范圍設(shè)置了rollback-only標記,確實會影響外圍事務(wù)進行實際提交的機會。


  注:默認,一個參與到外圍事務(wù)的事務(wù),會使用外圍事務(wù)的特性,安靜地忽略掉自己的隔離級別,超時值,只讀標識等設(shè)置。當然可以在事務(wù)管理器上設(shè)置validateExistingTransactions標識為true,這樣當你自己的事務(wù)和參與到的外圍事務(wù)設(shè)置不一樣時會被拒絕。


以上就是動力節(jié)點java學院小編介紹的“Java面試題集:JavaSpring事務(wù)常見面試”的內(nèi)容,希望對大家有幫助,更多java最新面試題請繼續(xù)關(guān)注動力節(jié)點java學院官網(wǎng),每天會有精彩內(nèi)容分享與你。


相關(guān)java面試題推薦


最新最全java面試題及答案(從初級到高級)


史上最全的中高級JAVA工程師面試題及答案匯總


Java高級開發(fā)工程師面試題


2019史上最全java面試題題庫大全800題


哪有資深java工程師面試題


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产免费网| 免费一级毛片在线播放放视频 | 羞羞视频免费网站 | 国产妞干网 | 欧洲在线 | 成人午夜视频免费观看 | 中文字幕亚洲无线码在线一区 | 久久精品国产999久久久 | 丰满老妇猛交视频 | 精品xxxxxbbbb欧美中文 | 91精品人成在线观看 | 美日韩一区二区三区 | 一个人看的视频免费高清在线 | 国产 字幕 制服 中文 在线 | 最近免费中文字幕大全高清大全1 | 午夜国产大片免费观看 | 欧美日韩欧美 | 香蕉视频首页 | 色视频在线观看在线播放 | 精品h视频| www视频在线看 | 精品在线免费视频 | 午夜在线看片 | 91丝瓜视频最新版 | 中文字幕免费在线观看 | 黄色片黄色片黄色片黄色片黄色片 | 老司机精品久久 | 成人禁在线观看 | 天天干天天射天天爽 | 日日射天天射 | 国产精品亚洲高清一区二区 | 色爱区综合五月激情 | 国产视频网站在线 | 99精品国产在这里白浆 | 免费看又黄又爽又猛的视频软件- | 亚洲国产欧美在线 | 青草视频网站在线观看 | 日日噜噜噜夜夜爽爽狠狠69 | 激情综合婷婷亚洲图片 | 国产亚洲女在线线精品 | 欧美高清在线视频一区二区 |