大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

Java面試題集:JavaSpring事務常見面試

更新時間:2019-11-12 14:56:21 來源:動力節點 瀏覽2245次



Java常見面試題匯總.jpg

  Spring和事務的關系


  關系型數據庫、某些消息隊列等產品或中間件稱為事務性資源,因為它們本身支持事務,也能夠處理事務。


  Spring很顯然不是事務性資源,但是它可以管理事務性資源,所以Spring和事務之間是管理關系。


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


  Spring事務三要素


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


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


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


  Spring事務的注解配置


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


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


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


  事務注解的本質


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


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


  Spring聲明式事務實現原理


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


  如何回滾一個事務


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


  默認回滾規則


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


  如何配置回滾異常


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


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


  事務注解在類/方法上


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


  事務注解在類上的繼承性


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


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


  事務注解在接口/類上


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


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


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


  只在public方法上生效?


  當采用代理來實現事務時,(注意是代理),@Transactional注解只能應用在public方法上。當標記在protected、private、package-visible方法上時,不會產生錯誤,但也不會表現出為它指定的事務配置。可以認為它作為一個普通的方法參與到一個public方法的事務中。


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


  目標類里的自我調用沒有事務?


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


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


  事務與線程


  和JavaEE事務上下文一樣,Spring事務和一個線程的執行相關聯,底層是一個ThreadLocal,就是每個線程一個map,key是DataSource,value是Connection。


  邏輯事務與物理事務


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


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


  那么如何處理邏輯事務和物理事務之間的關聯關系呢,這就是傳播特性解決的問題。


  事務的傳播特性


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


  REQUIRED


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


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


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


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


相關java面試題推薦


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


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


Java高級開發工程師面試題


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


哪有資深java工程師面試題


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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美三级在线观看不卡视频 | 一区二区视频在线播放 | 精品99久久| 香蕉视频影院 | 日本色综合| www一级毛片 | 亚洲欧美视频二区 | 国产不卡视频在线播放 | 99久久久无码国产精品 | 日韩欧美二区在线观看 | 高清二区| 日韩免费一级片 | 91精品国产乱码久久久久久 | 久久精品无码一区二区日韩av | 久久久久国产视频 | 99热在线国产 | 伊人这里只有精品 | 久久精品伦理 | 日韩另类视频 | 日本不卡免费高清视频 | 99秒拍福利大尺度视频 | 亚洲国产精品xo在线观看 | 尤物视频在线观看 | 四虎影视免费永久在线观看黄 | 天天色综合图片 | 成人黄18免费视频 | 国产精品在线观看 | 这里只有精品视频在线观看 | 女bbbxxx毛片视频 | 欧美激情级毛片 | 香蕉久久夜色精品国产 | 欧美亚洲综合在线观看 | 天天爽天天爽 | 欧美中文综合在线视频 | 亚洲日本va中文字幕 | 成人免费毛片观看 | 91久久综合 | 日本视频不卡 | 99热久久国产精品这里小说 | 一级毛片免费播放 | 国产中文字幕视频 |