-
8、Spring事物不回滾 1)默認(rèn)spring事務(wù)只在發(fā)生未被捕獲的 runtimeexcetpion時(shí)才回滾。?? ? ?spring aop??異常捕獲原理:被攔截的方法需顯式拋出異常,并不能經(jīng)任何處理,這樣aop代理才能捕獲到方法的異常,才能進(jìn)行回滾,默認(rèn)情況下aop只捕獲runtimeexception的異常,但可以通過(guò)配置來(lái)捕獲特定的異常并回滾?? ??解決方案:? ??方案1.例如service層處理事務(wù),那么service中的方法中不使用try catch做異常捕獲,或者在catch語(yǔ)句中最后增加throw new RuntimeException()語(yǔ)句 ??方案2.在service層方法的catch語(yǔ)句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語(yǔ)句,手動(dòng)回滾,這樣上層就無(wú)需去處理異常(現(xiàn)在項(xiàng)目的做法) 2)數(shù)據(jù)庫(kù)不支持InnoDB? 解決方案: 1)修改mysql存儲(chǔ)引擎方式 更改方式1: 在my.cnf,在[mysqld]最后添加為上default-storage-engine=InnoDB,重啟數(shù)據(jù)庫(kù)服務(wù),數(shù)據(jù)庫(kù)默認(rèn)的引擎修改為InnoDB。 更改方式2: 在建表的時(shí)候指定或者建完表修改 create table tableName( id int primary key, name varchar(50) )type=InnoDB; 建完表之后修改也可以 alter table tableName ENGINE=InnoDB; #mysql5.0以后用這種方式 alter table tableName type = InnoDB; #mysql5.0之前用這種方式 修改完之后查看 show create table tableName; #這個(gè)信息可能比較多注意查看ENGINE這個(gè)關(guān)鍵字。 2)來(lái)源: http://blog.csdn.net/my_god_sky/article/details/51840451查看全部
-
9、總結(jié) 事務(wù)管理器有了連接池才能獲得鏈接進(jìn)行事務(wù)管理) 1* 編程式事務(wù)管理 - 通過(guò)TrasactionTemplate手動(dòng)編寫(xiě)代碼進(jìn)行事務(wù)管理(很少使用) - 1.在AccountService中使用TransactionTemplate - 2.TransactionTemplate依賴DataSourceTransactionManager - 3.DataSourceTransactionManager依賴DataSource構(gòu)造 2* 聲明式事務(wù)管理(通過(guò)AOP實(shí)現(xiàn)的) - 基于TransactionProxyFactoryBean的方式(很少使用) . 需要為每個(gè)進(jìn)行事務(wù)管理的類(lèi),配置一個(gè)TransactionProxyFactoryBean進(jìn)行增強(qiáng) 注入:目標(biāo),事務(wù)管理器,事務(wù)屬性:1.PROPAGATION :事務(wù)的傳播行為 2.ISOLATION:事務(wù)的隔離級(jí)別3.readOnly:只讀 4.-Exception :發(fā)生那些異常回滾事務(wù) 5.+Exception :發(fā)生那些異常事務(wù)不回滾 - 基于AspectJ的xml方式(經(jīng)常使用) . 一旦配置好,類(lèi)上不需要添加任何東西 1.配置事務(wù)的通知<tx> 2.配置切面,切點(diǎn)<aop> - 基于注解(經(jīng)常使用) . 配置簡(jiǎn)單,需要在業(yè)務(wù)層類(lèi)上添加一個(gè)@Transactionl的注解 1.開(kāi)啟事務(wù)<tx:annotation-driven transaction-Manager="" /> 2.service類(lèi)@Transactional(name=value)查看全部
-
事務(wù)的特性:原子性,隔離性,一致性,持久性查看全部
-
使用XML配置聲明式事務(wù)(原始方式)查看全部
-
聲明式事務(wù)管理第一種配置方式:prop格式,key代表方法,實(shí)際開(kāi)發(fā)中可能就是key="save*",key="update*"查看全部
-
聲明式事務(wù)管理是用aop實(shí)現(xiàn)的事物管理 transactionProxyFactoryBean是為某一個(gè)類(lèi)產(chǎn)生代理對(duì)象的查看全部
-
需要引入的jar包:查看全部
-
applicationContext.xml中引入外部文件、連接池的配置、bean的配置查看全部
-
在業(yè)務(wù)層人為地制造一個(gè)異常:查看全部
-
測(cè)試類(lèi)的編寫(xiě):(未加事務(wù)管理)查看全部
-
業(yè)務(wù)層代碼:set方式注入查看全部
-
Dao層代碼:繼承查看全部
-
三個(gè)主要高層接口 首先會(huì)根據(jù)TransactionDefinition事務(wù)定義的信息(比如定義了什么樣的隔離級(jí)別,定義什么樣的傳播行為),由PlatformTransactionManager對(duì)事務(wù)進(jìn)行管理,進(jìn)行事務(wù)管理的過(guò)程中,事務(wù)會(huì)產(chǎn)生一些相應(yīng)的狀態(tài),這些狀態(tài)在TransactionStatus中查看全部
-
持久性查看全部
-
隔離性查看全部
舉報(bào)
0/150
提交
取消