-
事物的傳播行為查看全部
-
Spring為不同的持久化框架提供了不同PlatformTransactionManager接口實(shí)現(xiàn)查看全部
-
Spring為不同的持久化框架提供了不同PlatformTransactionManager接口實(shí)現(xiàn)查看全部
-
spring的事務(wù)傳播行為查看全部
-
TransactionStatus接口用來(lái)記錄事務(wù)的狀態(tài) 該接口定義了一組方法,用來(lái)獲取或判斷事務(wù)的相應(yīng)狀態(tài)信息. 平臺(tái)事務(wù)管理器(PlatformTransactionManager)會(huì)根據(jù)TransactionDefinition中定義的事務(wù)信息(包括隔離級(jí)別、傳播行為)來(lái)進(jìn)行事務(wù)的管理,在管理的過(guò)程中事務(wù)可能產(chǎn)生了保存點(diǎn)或事務(wù)是新的事務(wù)等情況,那么這些信息都會(huì)記錄在TransactionStatus的對(duì)象中.查看全部
-
事務(wù)的傳播行為:主要是解決業(yè)務(wù)層方法之間的相互調(diào)用的問(wèn)題。 第一類(lèi)共同點(diǎn):如果 A 方法中有事務(wù),則調(diào)用 B 方法時(shí)就用該事務(wù),即:A和B方法在同一個(gè)事務(wù)中。 PROPAGATION_REQUIRED:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就創(chuàng)建一個(gè)新的事務(wù),即:A和B方法在同一個(gè)事務(wù)中。 PROPAGATION_SUPPORTS:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就不使用該事務(wù)。 PROPAGATION_MANDATORY:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就拋出異常。 第二類(lèi)共同點(diǎn):A方法和B方法沒(méi)有在同一個(gè)事務(wù)里面。 PROPAGATION_REQUIRES_NEW:如果 A 方法中有事務(wù),則掛起并新建一個(gè)事務(wù)給 B 方法。 PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事務(wù),則掛起。 PROPAGATION_NEVER:如果 A 方法中有事務(wù),則報(bào)異常。 第三類(lèi):如果 A 方法有的事務(wù)執(zhí)行完,設(shè)置一個(gè)保存點(diǎn),如果 B 方法中事務(wù)執(zhí)行失敗,可以滾回保存點(diǎn)或初始狀態(tài)。查看全部
-
TransactionDefinition定義事務(wù)隔離級(jí)別 如果不考慮隔離性,會(huì)引發(fā)如下的安全問(wèn)題: 1.臟讀。 一個(gè)事務(wù)讀取了另一個(gè)事務(wù)改寫(xiě)但還未提交的數(shù)據(jù),如果這些數(shù)據(jù)被回滾,則讀到的數(shù)據(jù)是無(wú)效的。 2.不可重復(fù)讀。 在同一個(gè)事務(wù)中,多次讀取同一數(shù)據(jù)返回的結(jié)果有所不同。 3.幻讀。 一個(gè)事務(wù)讀取了幾行記錄后,另一個(gè)事務(wù)插入一些記錄,幻讀就發(fā)生了。再后來(lái)的查詢中,第一個(gè)事務(wù)就會(huì)發(fā)現(xiàn)有些原來(lái)沒(méi)有的記錄。 隔離級(jí)別的出現(xiàn)就是為了解決以上問(wèn)題的。 數(shù)據(jù)庫(kù)提供的事務(wù)的隔離級(jí)別(四種): 1.READ_UNCOMMITED; 允許你讀取還未提交的改變了的數(shù)據(jù),可能導(dǎo)致臟,幻,不可重復(fù)讀。 2.READ_COMMINTED: 允許在并發(fā)事務(wù)已經(jīng)提交后讀取,可防止臟讀,但幻讀和不可重復(fù)讀還是有可能發(fā)生。 3.REPEATABLE_READ: 對(duì)相同字段的多次讀取是一致的,除非數(shù)據(jù)被事務(wù)本身改變,可防止臟讀,不可重復(fù)讀,但幻讀仍有可能出現(xiàn)。 4.SERILIZABLE: 完全服從ACID的隔離級(jí)別,確保不發(fā)生臟讀,幻讀,不可重復(fù)讀,這在所有的隔離級(jí)別中是最慢的,它是典型的完全通過(guò)鎖定在事務(wù)中涉及的數(shù)據(jù)表來(lái)完成的。 除了以上的數(shù)據(jù)庫(kù)提供的事務(wù)隔離級(jí)別,spring提供了Default隔離級(jí)別,該級(jí)別表示spring使用后端數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別。 MySQL默認(rèn)事務(wù)隔離級(jí)別:REPATABLE_READ(可能出現(xiàn)幻讀) Oracle默認(rèn):READ_COMMITTED(可能出現(xiàn)不可重復(fù)讀和幻讀)查看全部
-
不同持久層框架對(duì)應(yīng)的不同事務(wù)管理器具體實(shí)現(xiàn)類(lèi) jdbc和MyBatis對(duì)應(yīng)第一個(gè) hibernate對(duì)應(yīng)第二個(gè)查看全部
-
Spring事務(wù)管理高層抽象接口查看全部
-
事務(wù)的四大特性: 原子性( Atomicity ):一個(gè)事務(wù)或者完全發(fā)生、或者完全不發(fā)生。 一致性( Consistency ):事務(wù)操作之后,數(shù)據(jù)庫(kù)所處的狀態(tài)和有業(yè)務(wù)規(guī)則是一致的。 隔離性( Isolation ):操作中的事務(wù)不互相影響。 持久性( Durability ):操作中放入事務(wù)提交后被持久化到數(shù)據(jù)庫(kù)。查看全部
-
5、編程式事務(wù)管理 為了簡(jiǎn)化設(shè)置事務(wù)的代碼量,提供了TransactionTemplate事務(wù)管理模版類(lèi).在哪個(gè)地方需要用到事務(wù),那么就在哪個(gè)地方注入這個(gè)模版.真正進(jìn)行事務(wù)管理是由事務(wù)管理器來(lái)完成. ①配置事務(wù)管理器:TranscationManager,一般在不適用Hibernate的情況下,使用DataSourceTranscationManager,需要注入數(shù)據(jù)源 ②配置事務(wù)管理器的事務(wù)管理的模板TransactionTemplate依賴(lài)于DataSourceTransactionManager數(shù)據(jù)源事務(wù)管理器(PlatformTransactionManager平臺(tái)事務(wù)管理器的實(shí)現(xiàn)類(lèi)). ③配置文件中引入TransactionTemplate類(lèi),把數(shù)據(jù)源事務(wù)管理器對(duì)象注入到使用的事務(wù)的service層的類(lèi)中,作為該bean的transactionManager屬性. DataSourceTransactionManager數(shù)據(jù)源管理器又依賴(lài)于DataSource.因此把數(shù)據(jù)源對(duì)象注入到數(shù)據(jù)源管理器的dataSource屬性中. ④在service中,要定義一個(gè)TransactionTemplate的成員變量,并生成set()方法.因此要把TransactionTemplate的bean注入到Service實(shí)體類(lèi)中的TransactionTemplate類(lèi)型的屬性中。 執(zhí)行transcationTemplate提供的execute方法,方法中進(jìn)行事務(wù)的操作,這個(gè)方法中有個(gè)參數(shù),transcationcallback,如果事務(wù)出現(xiàn)回滾,將會(huì)調(diào)用這個(gè)參數(shù)進(jìn)行操作。如果匿名內(nèi)部類(lèi)要拿到外層包裹它的方法的參數(shù),那么要將參數(shù)修飾成final 這里調(diào)用模板方法將兩個(gè)dao操作放在一個(gè)事物里查看全部
-
編程式事務(wù)管理: 1.先配置一個(gè)事務(wù)管理器DataSourceTransactionManager(是PlatformTransactionManager接口的一個(gè)實(shí)現(xiàn)類(lèi))的bean。 2.配置一個(gè)TransactionTemplate的bean。 3.在業(yè)務(wù)層對(duì)象中把TransactionTemplate這個(gè)bean注入進(jìn)去。 4.在業(yè)務(wù)層中使用注入的TransactionTemplate屬性對(duì)象調(diào)用execute(new TransactionCallbackWithoutResult(){ @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { accountDao.outMoney(out, money); //int i=1/0; accountDao.inMoney(in, money); } })方法實(shí)現(xiàn)事務(wù)管理。查看全部
-
Spring事務(wù)管理的兩種方式查看全部
-
TransactionStatus接口用來(lái)記錄事務(wù)的狀態(tài) 該接口定義了一組方法,用來(lái)獲取或判斷事務(wù)的相應(yīng)狀態(tài)信息. 平臺(tái)事務(wù)管理器(PlatformTransactionManager)會(huì)根據(jù)TransactionDefinition中定義的事務(wù)信息(包括隔離級(jí)別、傳播行為)來(lái)進(jìn)行事務(wù)的管理,在管理的過(guò)程中事務(wù)可能產(chǎn)生了保存點(diǎn)或事務(wù)是新的事務(wù)等情況,那么這些信息都會(huì)記錄在TransactionStatus的對(duì)象中.查看全部
-
事務(wù)的傳播行為:主要是解決業(yè)務(wù)層方法之間的相互調(diào)用的問(wèn)題 第一類(lèi)共同點(diǎn):如果 A 方法中有事務(wù),則調(diào)用 B 方法時(shí)就用該事務(wù),即:A和B方法在同一個(gè)事務(wù)中。 PROPAGATION_REQUIRED:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就創(chuàng)建一個(gè)新的事務(wù),即:A和B方法在同一個(gè)事務(wù)中。 PROPAGATION_SUPPORTS:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就不使用該事務(wù)。 PROPAGATION_MANDATORY:如果 A 方法中沒(méi)有事務(wù),則調(diào)用 B 方法時(shí)就拋出異常。 第二類(lèi)共同點(diǎn):A方法和B方法沒(méi)有在同一個(gè)事務(wù)里面。 PROPAGATION_REQUIRES_NEW:如果 A 方法中有事務(wù),則掛起并新建一個(gè)事務(wù)給 B 方法。 PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事務(wù),則掛起。 PROPAGATION_NEVER:如果 A 方法中有事務(wù),則報(bào)異常。 第三類(lèi):如果 A 方法有的事務(wù)執(zhí)行完,設(shè)置一個(gè)保存點(diǎn),如果 B 方法中事務(wù)執(zhí)行失敗,可以滾回保存點(diǎn)或初始狀態(tài)。查看全部
舉報(bào)
0/150
提交
取消