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