将描述通过 <tx:advice/>
标签来指定不同的事务性设置。默认的 <tx:advice/>
设置如下:
-
事务传播设置是
REQUIRED
-
隔离级别是
DEFAULT
-
事务是 读/写
-
事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
-
任何
RuntimeException
将触发事务回滚,但是任何 checkedException
将不触发事务回滚
这些默认的设置当然也是可以被改变的。 <tx:advice/>
和 <tx:attributes/>
标签里的<tx:method/>
各种属性设置总结如下:
<tx:method/>
有关的设置
属性 | 是否需要? | 默认值 | 描述 |
---|---|---|---|
name |
是 |
与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如: |
|
propagation |
不 | REQUIRED | 事务传播行为 |
isolation |
不 | DEFAULT | 事务隔离级别 |
timeout |
不 | -1 | 事务超时的时间(以秒为单位) |
read-only |
不 | false | 事务是否只读? |
rollback-for |
不 |
将被触发进行回滚的 |
|
no-rollback-for |
不 |
不 被触发进行回滚的 |
Spring中propagation类的事务属性详解
- PROPAGATION_REQUIRED: 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
- PROPAGATION_SUPPORTS: 支持当前事务,如果当前没有事务,就以非事务方式执行。
- PROPAGATION_MANDATORY: 支持当前事务,如果当前没有事务,就抛出异常。
- PROPAGATION_REQUIRES_NEW: 新建事务,如果当前存在事务,把当前事务挂起。
- PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
- PROPAGATION_NESTED: 支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务