Spring中的事物控制
spring的事务控制是基于AOP的,它可以使用编程的方式实现,也可以使用配置的方式实现,自己重点总结下使用配置方式实现.
在开发中,使用spring事务管理器的实现类,
真正管理事务的对象
org.springframework.jdbc.datasource.DataSourceTransactionManager使用Spring JDBC或iBatis 进行持久化数据时使用
org.springframework.orm.hibernate3.HibernateTransactionManager 使用Hibernate版本进行持久化数据时使用
1.基于XML的声明式事务控制(直接上事物配置)
1.1第一步:配置一个事物管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入DataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
1.2第二步:配置事物通知引用事物管理器
<tx:advice id="txAdvice" transaction-manager="transactionManager">
</tx:advice>
1.3第三步:配置事物的属性
<!--在tx:advice标签内部配置事务的属性 -->
<tx:attributes>
<!-- 指定方法名称:是业务核心方法
read-only:是否是只读事务。默认false,不只读。
isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
propagation:指定事务的传播行为。
timeout:指定超时时间。默认值为:-1。永不超时。
rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。没有默认值,任何异常都回滚。
no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,任何异常都回滚。
-->
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
</tx:attributes>
1.4配置事物AOP切入点表达式
<aop:config>
<!-- 配置切入点表达式 -->
<aop:pointcut expression="execution(* com.xxx.service.impl.*.*(..))" id="pt1"/>
</aop:config>
1.5第五步:配置切入点表达式和事物通知的对应关系
<!-- 在aop:config标签内部:建立事务的通知和切入点表达式的关系 -->
<aop:advisor advice-ref="txAdvice"pointcut-ref="pt1"/>