常用配置:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务的通知(事务的增强) -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="do*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="transactionPointcut" expression="execution(* com.heyin.zkgj.service..impl..*.*(..))"/>
<!--配置切面 当配置了多个切入点,可用<aop:aspect来配置多个切面-->
<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
</aop:config>
<!-- Spring AOP config
解释一下(* com.heyin.zkgj.service..impl..*.*(..))中几个通配符的含义:
第一个 * —— 通配 任意返回值类型
第二个 * —— 通配 com.heyin.zkgj.service..impl包或子包下的任意class
第三个 * —— 通配 com.heyin.zkgj.service..impl包或子包下的任意class的任意方法
第四个 .. —— 通配 方法可以有0个或多个参数
-->
<tx:advice/>
有关的设置
这一节里将描述通过 <tx:advice/>
标签来指定不同的事务性设置。默认的 <tx:advice/>
设置如下:
事务传播设置是
REQUIRED
隔离级别是
DEFAULT
事务是 读/写
事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
任何
RuntimeException
将触发事务回滚,但是任何 checkedException
将不触发事务回滚
这些默认的设置当然也是可以被改变的。 <tx:advice/>
和 <tx:attributes/>
标签里的 <tx:method/>
各种属性设置总结如下:
表 9.1. <tx:method/>
有关的设置
属性 | 是否需要? | 默认值 | 描述 |
---|---|---|---|
name | 是 | 与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如: | |
propagation | 不 | REQUIRED | 事务传播行为 |
isolation | 不 | DEFAULT | 事务隔离级别 |
timeout | 不 | -1 | 事务超时的时间(以秒为单位) |
read-only | 不 | false | 事务是否只读? (典型地, 对于只执行查询的事务你会将该属性设为true, 如果出现了更新、插入或是删除语句时只读事务就会失败) |
rollback-for | 不 | 将被触发进行回滚的 | |
no-rollback-for | 不 | 不 被触发进行回滚的 |