足彩总进球数怎么中奖 竞彩足球总进球在哪看 总进球计算器 竞彩总进球数怎么算 世界杯荷兰总进球数 c罗职业生涯总进球数 裁判员总进球 竞彩足球总进球大小球 竞彩总进球数复选 c罗职业生涯总进球650 总进球数难于上青天 c罗总进球650 欧冠总进球c罗 竞猜总进球计算器 计算器足球总进球数玩法

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




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工程師面試題


2012年梅西总进球数
足彩总进球数怎么中奖 竞彩足球总进球在哪看 总进球计算器 竞彩总进球数怎么算 世界杯荷兰总进球数 c罗职业生涯总进球数 裁判员总进球 竞彩足球总进球大小球 竞彩总进球数复选 c罗职业生涯总进球650 总进球数难于上青天 c罗总进球650 欧冠总进球c罗 竞猜总进球计算器 计算器足球总进球数玩法
麻将牌型 彩票复式组合器 排列5吧 孩子说我长大要赚钱给你花 36棋牌新神兽作弊器 乐通mg老虎机手机版 富士自助打印赚钱吗 网络吐槽赚钱 北京pk10直播盛 最新天天捕鱼游戏下载 时时彩怎么玩 足彩微信 河北11选5下载软件 百搭二王棋牌游戏正式版下载v1.0.3 极速飞艇全天计划 贵州麻将怎么打