JavaEE企业级项目开发(第3版)教学课件微课6-5:基于Spring注解方式的事务管理配置.pptx
主讲人:石云延迟符基于Spring注解方式的事务管理配置Spring的数据库开发与事务
Spring的声明式事务底层建立在AOP基础上。本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
Spring的声明式事务声明式事务,有以下优点。不需要通过编程的方式管理事务,不需要在业务逻辑代码中掺杂事务管理的代码。事务管理是一个典型的横切逻辑。AOP为声明式事务提供了简单而强大的支持。只需在配置文件中做相关的事务规则声明(或通过等价的基于标注的方式),便可以将事务规则应用到业务逻辑中。
Spring的声明式事务1.基于TransactionInter的声明式事务管理Spring提供了TransactionInterceptor类来实施声明式事务管理功能。
Spring的声明式事务beanid=transactionInterceptorclass=erceptor.TransactionInterceptorpropertyname=transactionManagerref=transactionManager/propertyname=transactionAttributespropspropkey=transferPROPAGATION_REQUIRED/prop/props/property/beanbeanid=bankServiceTargetclass=footmark.spring.core.tx.declare.origin.BankServiceImplpropertyname=bankDaoref=bankDao//beanbeanid=bankServiceclass=org.springframework.aop.framework.ProxyFactoryBeanpropertyname=targetref=bankServiceTarget/propertyname=interceptorNameslistidrefbean=transactionInterceptor//list/property/bean
Spring的声明式事务指定事务属性的取值的规则传播行为[,隔离级别][,只读属性][,超时属性][不影响提交的异常][,导致回滚的异常]传播行为必须设置,取值必须以“PROPAGATION_”开头,具体包括:PROPAGATION_MANDATORYPROPAGATION_NESTEDPROPAGATION_NEVERPROPAGATION_NOT_SUPPORTEDPROPAGATION_REQUIREDPROPAGATION_REQUIRES_NEWPROPAGATION_SUPPORTS隔离级别的取值必须以“ISOLATION_”开头,具体包括:ISOLATION_DEFAULTISOLATION_READ_COMMITTEDISOLATION_READ_UNCOMMITTEDISOLATION_REPEATABLE_READISOLATION_SERIALIZABLE
Spring的声明式事务示例1:propertyname=*ServicePROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,TIMEOUT_20,+AbcException,+DefException,-HijException/property针对所有方法名以Service结尾的方法,使用PROPAGATION_REQUIRED事务传播行为,事务的隔离级别是ISOLATION_READ_COMMITTED,超时时间为20秒,当事务抛出AbcException或者DefException类型的异常,则仍然提交,当抛出HijException类型的异常时必须回滚事务。这里没有指定“readOnly”,表示事务不是只读的。
Spring的声明式事务示例2:propertyname=testPROPAGATION_REQUIRED,readOnly/property针对所有方法名为test的方法,使用PROPAGATION_REQUIRED事务传播行为,并且该事务是只读的。除此之外,其他的属性均使用默认值。比如,隔离级别和超时时间使用底层事务性资源的默认值,并且当发生未检查异常,则回滚事务,发生已检查异常则仍提交事务。
Spring的声明式事务【例6-2】Spring支持声明式事务实例。配置文件spring.xml的代码如下