转自:https://www.aliyun.com/jiaocheng/1311989.html
首先先看一下代码:
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
需要在< tx:advice >标签内设置id和transaction-manager属性,id为advice bean的标识,transaction-manager则必须引用一个PlatformTransactionManager Bean。
然后在标签内通过 < tx:attributes >创建通知行为,上述代码通知所开启的事务针对所有的delete、insert……方法。
默认的< tx:advice >设置如下:
- 事务传播设置是:REQUIRED
- 隔离级别是:DEFAULT
- 事务是:读/写
- 事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
- 任何RuntimeException将触发事务回滚,但任何checkedException将不触发事务回滚。
< tx:method >有关的设置
属性 | 是否必须 | 默认值 | 描述 |
---|---|---|---|
name | 是 | 与事务属性关联的方法名,通配符*可以用来指定一批关联到相同的事务属性的方法 | |
propagation | 否 | REQUIRED | 事务传播行为 |
isolation | 否 | DEFAULT | 事务隔离级别 |
timeout | 否 | -1 | 事务超时的时间(以秒为单位) |
read-only | 否 | false | 食物是否只读 |
rollback-for | 否 | 将被触发进行回滚的Exception(s),以逗号隔开。 | |
no-rollback-for | 否 | 不被触发进行回滚的Exception(s),以逗号隔开。 |