亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
  • Spring事務管理課程:


    查看全部
  • spring事務管理高層抽象主要包括3個接口

    1. PlatformTransactionManager (事務管理器)

    2. TransactionDefinition (事務定義信息(隔離,傳播,超時,只讀))

    3. TransactionStatus (事務具體運行狀態)

    查看全部
    0 采集 收起 來源:接口介紹

    2019-09-08

  • log4文件:http://www.xianlaiwan.cn/qadetail/303285

    java.lang.IllegalStateException: Failed to load ApplicationContext解決方法:http://www.xianlaiwan.cn/qadetail/189429


    查看全部
  • Spring事務管理的兩種方式

    1、編程式的事務管理:手動在程序中編寫代碼實現事務管理,實際應用中很少使用,通過TransactionTemplate管理事務。

    2、聲明式的事務管理:使用XML配置實現事務管理,推薦使用(代碼侵入性最?。琒pring的聲明式事務管理是通過AOP實現的(沒有代碼之前開啟事務,代碼完成后提交事務)。


    搭建事務管理環境(轉賬環境)

    【a】創建表及插入記錄

    【b】創建項目并引入jar包

    【c】引入log4j.properties、applicationContext.xml、jdbc.properties配置文件。

    【e】創建包結構,編寫Dao及Service

    【f】spring配置文件編寫


    查看全部
  • TransactionStatus接口介紹

    TransactionStatus接口:提供了獲取事務狀態的方法(例如:hasSavepoint()事務是否有保存點,isCompleted()事務是否已經完成,isNewTransaction()是否是新的事務)。


    查看全部
  • 服務器端分為三層:web層,業務層和持久層。

    事務加在業務層。


    TransactionDefinition定義事務傳播行為

    事務的傳播行為:解決業務層方法之間相互調用的問題(一個service層里的方法調用另一個service里中的方法,這兩個service中又分屬于兩個不同的事務,傳播行為就是為了解決方法調用時事務的傳遞)。

    事務的傳播行為有7種,可以為3類:

    第一類為前三個,重點掌握第一個(在相同事務里):支持當前事務(Service中aaa()調用Service中bbb()方法時,如果aaa()有事務,則bbb()使用該事務。如果aaa()沒有事務,則bbb()就會創建一個事務),然后把aaa()里的內容包起來。

    第二類為接下來三個,重點掌握第一個(在不同事務中):如果aaa()有事務存在,掛起當前事務,創建一個新的事務(aaa()和bbb()不在一個事務中)。

    第三類:如果當前事務存在,則嵌套事務執行(執行aaa()完后,會使用事務的保存點,在執行bbb()時如果發生異常,可以回滾到設置的保存點,也可以回滾到最初始的狀態)。

    查看全部
  • 事務的定義:

    事務指的是邏輯上的一組操作,這組操作要么全部成功,要么全部失敗。

    事務的特性:原子性、一致性、隔離性、持久性 (ACID)。

    原子性:事務是一個不可分割的工作單位(其中的操作不能單獨運行),事務中的操作要么都發生,要么都不發生。

    一致性:事務前后數據的完整性必須保持一致。

    隔離性:多個用戶并發訪問數據庫時,一個用戶的事務不能被其他用戶的事務所干擾,多個并發事務之間數據要相互隔離(數據庫中相應的數據隔離級別,通過它避免事務間的沖突)。

    持久性:一個事務一旦被提交,它對數據庫中數據的改變是永久性的,即使數據庫發生故障也不應該對其有任何影響。


    查看全部
    0 采集 收起 來源:事務回顧

    2019-08-17

  • 課程目標

    -Spring事務管理的一組API

    -Spring的編程式事務管理

    -Spring的聲明式事務管理


    查看全部
  • 事務管理的兩種方式

    查看全部
  • 事務傳播行為

    查看全部
  • Spring將事物管理分成了兩類:

    【1】編程式事務管理:手動編寫代碼進行事物管理(很少使用)

    【2】聲明式事務管理:

    基于TransactionProxyFactoryBean的方式(很少使用)

    ——需要為每個進行事務管理的類,配置一個代理類,后期維護和管理不方便。

    基于AspectJ的XML方式(經常使用)

    ——可以清晰的在XML配置文件中,查看到哪些類哪些方法應用事物管理,業務層上不需要添加任何東西。

    基于注解方式(經常使用)

    ——使用簡單,需要為每一個需要事務管理的業務層上添加注解@Transactional。

    查看全部
    0 采集 收起 來源:課程總結

    2019-08-14

  • 聲明式事務管理方式三:基于注解的方式

    加載測試環境:Spring提供的,@RunWith(SpringJUnit4ClassRunner.class),只有加載它了,才可以使用@Test注解。

    加載配置文件:@ContextConfiguration(classpath:相對路徑)。

    【1】配置事物管理器

    https://img1.sycdn.imooc.com//5d5359430001914d08070115.jpg

    【2】開啟注解事物

    https://img1.sycdn.imooc.com//5d5359780001a2f706970067.jpg

    【3】添加注解@Transactional(哪個類上需要事物管理就在哪個類上添加注解)

    https://img1.sycdn.imooc.com//5d535ad20001d20609660169.jpg

    該注解中也包含一些屬性(傳播行為、隔離級別、超時、異常),如果不寫,都會按默認值來處理。

    https://img1.sycdn.imooc.com//5d535cbf000160a407480246.jpg

    查看全部
  • 聲明式事物管理方式二:基于AspectJ的XML方式

    實際開發中,不經常使用第一種方式(TransactionProxyFactoryBean代理類),因為這種方式需要為每一個需要事務管理的Service配置一個TransactionProxyFactoryBean,開發和維護帶來不便。

    【1】引入AspectJ的jar包和整合AspectJ的包。

    AspectJ簡介:Spring在開發AOP時,為了簡化編程而建立的。(AspectJ實際是開源的、第三方的AOP開發框架,Spring為簡化自身開發,就引入了AspectJ的包)

    https://img1.sycdn.imooc.com//5d52be3500013e2706880085.jpg

    【2】配置事物管理器,并注入數據源dataSource。

    https://img1.sycdn.imooc.com//5d52c14a0001a93710260121.jpg

    【3】配置事物的通知(事物的增強,通過<tx:advice id=""? transaction-manager="事物管理器Id"></tx:advice>,這個標簽中需要配置事物相關的一些屬性<tx:attributes></tx:attributes>,該屬性的作用就是哪些方法執行事務,<tx:method="方法名"></tx:method>如果多個方法可以用英文單詞*,該標簽中還定義了事物的傳播行為、隔離級別、超時信息、只讀等等屬性)

    https://img1.sycdn.imooc.com//5d52c781000187d509420175.jpg

    https://img1.sycdn.imooc.com//5d52c7810001b80710170281.jpg

    事物增強的一些屬性信息。


    https://img1.sycdn.imooc.com//5d5355b60001e31511160243.jpg

    【4】配置AOP的切面(通過<aop:config></aop:config>,在<aop:config>下需要配置切入點<aop:point-cut expression="" id=""></aop:point-cut>,其中表達式最前面的*表示方法返回值為任意的,+號表示及其子類,.*表示任意的方法,(..)表示任意的參數,接下來需要配置切面其中<aop:aspect>代表多個切入點,多個通知,而<aop:advisor>是一個切入點,一個通知的。這里使用它即可。因為現在只有一個增強即事物增強,這樣AccountService即其子類的任意方法都會事物增強了)


    https://img1.sycdn.imooc.com//5d5351cb0001528f10210186.jpg


    該聲明式事務管理就不需要再注入代理了,這種方式屬于自動代理,自動代理一般是基于BeanPostProcessor這個類,也就是類生成過程中(Serivice)本身就是一個代理。



    查看全部
  • 基于TransactionProxyFactoryBean實現聲明式事物管理:基于AOP來實現事物管理功能(也就是在執行Dao中方法前后做一些操作)。

    【1】引入AOP的jar包。

    【2】配置事物管理器。

    https://img3.sycdn.imooc.com/5d4ebefe00019a3310210150.jpg

    【3】實現事務管理可以為Service提供一個代理類,該代理類可以對Service方法進行增強。這里在配置文件中使用Spring傳統的AOP方式配置代理類。

    Spring傳統的事務管理的操作中,提供了一個事物代理的工廠類TransactionProxyFactoryBean,它就可以為某一個Service產生代理對象。其中該事物代理工廠需要注入一個屬性,該屬性就是目標對象。接下來就會產生代理對象,產生的代理對象還需要事務管理,所以還需注入事務管理器。

    要想事物管理還需要一些定義信息例如:隔離級別、傳播行為。所以還需要注入一些事物屬性,通過TransactionProxyFactoryBean源碼可知,該事物屬性該怎樣配置,如圖2。為何這樣配置,可以找到setTransactionAttributes方法,該方法參數是Properties類型。

    通過源碼可知key的值為insert開頭的任意方法就使用PROPAGATION_REQUIRED傳播行為,其他同理。

    prop的格式:

    PROPAGATION:事物的傳播行為。

    ISOLATION:事物的隔離級別。

    readOnly:只讀。

    -Exception:發生哪些異?;貪L事物(默認情況下發生任何異常都會回滾事物)。

    +Exception:發生哪些異常事物不會滾,仍然提交事物。

    https://img1.sycdn.imooc.com//5d4ec38b0001075415260325.jpg

    https://img1.sycdn.imooc.com//5d4ec5850001c9c007420262.jpg

    https://img1.sycdn.imooc.com//5d4ec61c0001fd2308760150.jpg

    https://img1.sycdn.imooc.com//5d4ec8280001d9aa05440174.jpg

    首先需要配置傳播行為,傳播行為必須要配置。這里配置PROPAGATION_REQUIRDE傳播行為,它是保證業務層之間方法相互調用時在同一個事物中。

    https://img1.sycdn.imooc.com//5d4ec8cf0001d28210400426.jpg

    業務層無需改動,因為該方式事務管理是AOP方式實現,但是測試這里需要改動需要注入代理類,AccountServiceImpl是沒有增強的類,而accountServiceProxy才是對AccountServiceImpl增強以后的類,它才具備事物處理的功能。,所以測試類需要注入accountServiceProxy,這是就可以進行實物管理了。

    https://img1.sycdn.imooc.com//5d4ecb690001f86907940337.jpg

    當事物設置成readOnly就不進行修改、刪除、插入操作了。如果這情況下設置成readOnly就會發生錯誤。

    https://img1.sycdn.imooc.com//5d4ecc4f0001314512940099.jpg

    如果使用+Exception,會發生事物仍然會提交,但不會回滾,該情況也就是錢仍然會被轉丟。

    https://img1.sycdn.imooc.com//5d4ecd2e0001dbc910700101.jpg


    查看全部
  • 編程式事務管理

    Spring為簡化編寫代碼,提供了事務管理模板TransactionTemplate,TransactionTemplate依賴DataSourceTransactionManager(使用SpirngJDBC時事務的管理類,它是PlatformTransactionManager接口的實現類),DataSourceTransactionManager依賴DataSource(例如service需要使用事務,只需要在service中注入改模板即可,JDBC是通過Connection對象來對事務進行管理,而SpringJDBC配置事務時也需要這樣的對象進行管理,這里是在配置事務管理器DataSourceTransactionManager的bean標簽里來注入連接池實現的,如圖)。

    https://img1.sycdn.imooc.com//5d4e4e4e000103d911150251.jpg

    配置事務管理器

    https://img1.sycdn.imooc.com//5d4e50780001a51809810114.jpg

    配置事務管理器模板

    https://img1.sycdn.imooc.com//5d4e52a90001fb2b09150108.jpg

    編程式事務管理就是在需要使用事務的地方手動編寫代碼,所以需要在Service層里注入該模板,這時Service調用Dao中的兩個方法就處于同一個事務中了。

    https://img1.sycdn.imooc.com//5d4e53ca0001f46b10650215.jpg

    https://img1.sycdn.imooc.com//5d4e53ca00017fa311560135.jpg

    通過模板的方法就可以實現業務回滾,execute(TransactionCallBack<T> transactionCallBack),TransactionCallBack實際是一個接口,可以手動創建一個類實現給接口,在傳入該對象。也可以使用匿名內部類的形式,匿名內部類的方法里就可以進行事務的操作了,該方法里的參數是事務的狀態對象,而且一個方法里的參數中匿名內部類想使用外部傳入的參數,需要使用final修飾該參數。如下圖

    https://img1.sycdn.imooc.com//5d4e575e0001223011300315.jpg





    查看全部

舉報

0/150
提交
取消
課程須知
學習本課程前需要熟悉Spring的基礎知識,掌握IOC和AOP的基本概念。小伙伴們可參考《Spring入門》課程
老師告訴你能學到什么?
1、理解Spring事務管理的基本概念 2、掌握Spring事務管理的應用場景 3、掌握聲明式事務管理和編程式事務管理的實現方式

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!