spring事務實現主要有兩種方法程序員
一、編程式,beginTransaction()、commit()、rollback()等事務管理相關的方法spring
二、聲明式,利用註解Transactional 或者aop配置編程
xml配置以下所示spa
1 <!-- 事務管理器 --> 2 3 <bean id="myTracnsactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 4 <property name="dataSource" ref="dataSource"></property> 5 </bean> 6 7 <!-- 事務代理工廠 --> 8 <!-- 生成事務代理對象 --> 9 <bean id="serviceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 10 <property name="transactionManager" ref="myTracnsactionManager"></property> 11 <property name="target" ref="buyStockService"></property> 12 <property name="transactionAttributes"> 13 <props> 14 <!-- 主要 key 是方法 15 ISOLATION_DEFAULT 事務的隔離級別 16 PROPAGATION_REQUIRED 傳播行爲 17 --> 18 <prop key="add*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED</prop> 19 <!-- -Exception 表示發生指定異常回滾,+Exception 表示發生指定異常提交 --> 20 <prop key="buyStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-BuyStockException</prop> 21 </props> 22 </property> 23
@Transactional註解課直接放在class或者method上面,spring容器會在調用時自動將事務織入,至關於代替程序員統一調用編程式事務方法代理
須要注意的事spring默認回滾的異常是RuntimeException,若是業務中須要拋出相似於IOException的異常時要修改回滾的異常爲Exception,code