1、事务的特点
ACID
原子性、一致性、隔离性、持久性
2、分布式事务
分布式事务处理(Distributed Transaction Processing,DTP)
分布式事务处理是指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。
3、事务配置代码
Spring1.2声明式事务配置关键代码(也能用于2.0)
见附件2
Spring2.0声明式事务配置关键代码
见附件2
4、事务管理的分类
两种事务管理方式:编程式、声明式。
Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。
我选择哪种呢?是选择编程式事务管理还是声明式事务管理
当你只有很少的事务操作时,编程式事务管理通常比较合适。例如,如果你有一个Web应用,其中只有特定的更新操作有事务要求,你可能不愿使用Spring或其他技术设置事务代理。这种情况下,使用 TransactionTemplate 可能 是个好办法。
另一方面,如果你的应用中存在大量事务操作,那么声明式事务管理通常是值得的。它将事务管理与业务逻辑分离,而且在Spring中配置也不难。使用Spring,而不是EJB CMT,声明式事务管理在配置上的成本极大地降低了
5、Spring中常用事务类型:
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop><prop key="store*">PROPAGATION_REQUIRED</prop>
Spring中常用事务类型:
· PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
· PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
· PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
· PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
· PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
· PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
· PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
通过 <tx:advice/> 标签来指定不同的事务性设置。默认的 <tx:advice/> 设置如下: W
· 事务传播设置是 REQUIRED
· 隔离级别是 DEFAULT
· 事务是 读/写
· 事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
· 任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚
这些默认的设置当然也是可以被改变的。 <tx:advice/> 和 <tx:attributes/> 标签里的 <tx:method/> 各种属性设置总结如下:
属性 |
是否需要? |
默认值 |
描述 |
name |
是 |
|
与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如:'get*'、'handle*'、'on*Event'等等。 |
propagation |
不 |
REQUIRED |
事务传播行为 |
isolation |
不 |
DEFAULT |
事务隔离级别 |
timeout |
不 |
-1 |
事务超时的时间(以秒为单位) |
read-only |
不 |
false |
事务是否只读? |
rollback-for |
不 |
|
将被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException' |
no-rollback-for |
不 |
|
不 被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException' |
注意:<aop:config>风格的配置使得对Spring auto-proxying 机制的使用变得很笨重。如果你已经通过BeanNameAutoProxyCreator或类似的东西使用显式的auto-proxying将会引发问题 (例如通知没有被织入)。推荐的使用模式是只使用<aop:config>风格或只使用 AutoProxyCreator风格