12.Spring事务控制

12. Spring事务控制(与数据库连接紧密)

12.1 编程式事务控制

1. PlatformTransactionManager

PlatformTransactionManager接口(不同的 Dao 层技术有不同的实现类)是spring的事务管理器,提供了常用的事务操作的方法

方法说明
TransactionStatus getTransaction(TransactionDefination defination)获取事务的状态信息
void commit(TransactionStatus status)提交事务
void rollback(TransactionStatus status)回滚事务

2. TransactionDefinition

TransactionDefinition是事务的定义信息对象,其含有以下方法:

方法说明
int getIsolationLevel()获得事务的隔离级别
int getPropogationBehavior()获得事务的传播行为
int getTimeout()获得超时时间
boolean isReadOnly()是否只读
2.1. 事务隔离级别

设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读:

  • ISOLATION_DEFAULT
  • ISOLATION_READ_UNCOMMITTED(解决脏读)
  • ISOLATION_READ_COMMITTED(解决不可重复读)
  • ISOLATION_REPEATABLE_READ(都可以解决但是性能低下)
  • ISOLATION_SERIALIZABLE
2.2事务传播行为(多个事务间的共同执行方式)
  • REQUIRED:如果当前没有事务,就新建一个事务,如果存在一个事务,加入到这个事务中。(默认值)
  • SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)

3. TransactionStatus

TransactionStatus接口提供的是事务具体的运行状态

方法说明
boolean hasSavepoint()是否存储回滚点
boolean isCompleted()事务是否完成
boolean isNewTransaction()是否是新事务
boolean isRollbackOnly()事务是否回滚

12.2 基于XML的声明式事务控制

1. 什么是声明式事务控制

Spring的声明式事务顾名思义就是采用声明的方式来处理事务(通过配置的方式)。这种形式的事务管理不侵入开发的组件(及解耦)。Spring声明式事务控制底层思想就是AOP。

2.声明式事务控制的实现

1.基于XML实现

明确事项:

  • 平台事务管理器
  • 事务通知的配置(引用上面的事务管理器、还有一些参数)
  • 事务aop的织入(aop:advisor)
<!--配置平台事务管理器-->
<bean id="" class="">
    <property name="dataSource" ref="dataSource"/>
</bean>
    
<!--通知 事务增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!--设置事务的属性信息,tx:method可以有多个-->
    <tx:attributes>
        <tx:method name="" />
    </tx:attributes>
</tx:advice>

<!--配置事务的aop织入-->
<aop:config>
	<aop:advisor advice-ref="txAdvice" pointcut="execution()" />
</aop:config>
2.基于注解方式配置
  • @Transactional(…) {isolation,timeout…}放在服务类前或者特定方法前
@Service
//类中所以方法都使用该配置
@Transactional(isolation=Isolation.REPEATABLE_READ)
public class ServiceImpl implements AccountService {
    @Autowired
    private Target target;
    
    @Transcational(...) //只可用于下面的方法,且为最高优先级
    public void method(...){
       target.todo();
       .......
    }
}
  • 在.xml文件中配置组件扫描(<context:scan />)和事务注解驱动(<tx:annotation-driven transaction-manager=“transactionManager” />)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值