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