Spring(六)【事务】
Spring的事务处理
1)接口:
事务管理器是PlatformTransactionManager接口,在接口定义了事务的主要方法:commit()事务提交;rollback()事务回滚
事务管理接口的实现类包括:
1.1)DataSourceTransactionManager:在使用JDBC或者MyBatis访问数据库时使用
在Spring中创建DataSourceTransactionManager对象:
<bean id="dataSource" class="包名.DataSourceTransactionManager">
<指定数据源myDataSource>
</bean>
1.2)HibernateTransactionManager:使用Hibernate框架时,使用的实现类
2)事务定义接口:TransactionDefinition
TransactionDefinition作用是定义了控制和管理事务的一些常量值,通过常量值可以指定事务的属性
2.1)事务的隔离级别:
DEFAULT:采用DB默认的事务隔离级别,mysql的默认为REPEATABLE_READ;Oracle的默认为READ_COMMITTED
READ_UNCOMMITTED:读未提交,未解决任何并发问题
READ_COMMITTED:读已提交,解决脏读,存在不可重复读与幻读
REPEATALBLE_READ:可重复读,解决脏读、不可重复读,存在幻读
SERIALIZABLE:串行化,不存在并发问题
2.2)事务的超时:
超时:指事务的最长执行时间,也就是一个方法最长的执行时间(可以是数据库的执行时间,也可以是方法执行时间),时间到代码仍没有执行结束,Spring则会回滚。
超时的单位为秒,默认值是-1,使用数据库自己的默认时间
2.3)事务的传播行为:
事务在方法之间传递,通过传播行为指定方法怎么使用事务,共有七种传播行为:
2.3.1)PROPAGATION_REQUIRED
2.3.2)PROPAGATION_REQUIRES_NEW
2.3.3)PROPAGATION_SUPPORTS
2.3.4)PROPAGATION_MANDATORY
2.3.5)PROPAGATION_NESTED
2.3.6)PROPAGATION_NEVER
2.3.7)PROPAGATION_NOT_SUPPORTED
2.4)事务的回滚方式:
Spring事务的默认回滚方式是:发生运行时异常和error时回滚,发生受查(编译)异常时提交。不过,对于受查异常,程序员也可以手工设置其回滚方式
使用Spring的事务注解管理事务
通过@Transactional注解方式,可将事务织入到相应public方法中,实现事务管理
@Transactional可选的属性包括:
1)propagation:用于设置事务传播属性,默认值为Propagation.REQUIRED
2)isolation:用于设置事务的隔离级别,默认值为Isolation.DEFAULT
3)readOnly:用于设置该方法对数据库的操作是否是只读的,类型为boolean,默认值为false
4)timeout:用于设置本操作与数据库连接的超时时限,单位为秒,类型为int,默认值为-1,即没有时限
5)rollbackFor:指定需要回滚的异常,类型为Class[],默认值为空数组,如果只有一个异常类时,可以不使用数组
6)rollbackForClassName:指定需要回滚的异常类类名,类型为String[],默认值为空数组
7)noRollbackFor:指定不需要回滚的异常,其他同上
8)noRollbackForClassName:指定不需要回滚的异常类类名
注意:@Transactional若用在方法上,只能用于public方法上,其他非public方法如果加了注解,不会报错,但是Spring会忽略该注解。若@Transactional加在类上,则表示该类所有的方法均在执行时会织入事务
实现注解的事务步骤:
1)声明事务管理器
2)启动注解驱动

3)编写事务注解

声明式的事务管理:
在Spring的配置文件中,使用aspectj实现事务的管理,能够完全和源代码解耦合
步骤:
1)加入aspectj的依赖

2)在Spring的配置文件中
2.1)声明事务管理器(和注解实现事务一样)
2.2)声明事务通知(指定业务方法的事务属性)

2.3)配置aop,指定切入点,把通知和切入点连接起来


浙公网安备 33010602011771号