spring实现事务原理
spring事务实现主要有两种方法
1、编程式,beginTransaction()、commit()、rollback()等事务管理相关的方法
2、声明式,利用注解Transactional 或者aop配置
xml配置如下所示
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,