[Java资深架构师必备技能]Spring事务控制

一、编程式事务控制相关对象

1.1.PlatformTransactionManager接口

平台事务管理器

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

1.2.TransactonDefination

事物的属性定义

方法说明
int getIsoIationLevel()获得事务的隔离级别
int getPropogationBehavior()获得事务的传播行为
int getTimout()获得超时时间
int isReadOnly()是否只读
  • 事务的隔离级别,用来解决脏读、可不重复读、虚读
    • ISOLATION_DEFAULT
    • ISOLATION_READ_UNCOMMITTED
    • ISOLATION_READ_COMMITTED
    • ISOLATION_REPEATABLE_READ
    • ISOLATION_SERIALIZABLE
  • 事务的传播行为
    • REQUIRED:如果当前没有事务、就新建一个事务、如果已经存在一个事务,就加入到这个事务中。默认值
    • SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
    • MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
    • REQUERS_NEW:新建事务,如果当前在事务中,就把当前事务挂起。
    • NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
    • NEVER:以非事务方式运行,如果当前存在事务,抛出异常
    • NESTED:如果当前存在事务,则嵌套事务内执行。如果当前没有事务,则执行REQUIRED类似的操作
    • 超时时间:默认值是-1,没有超时限制。如果有,以秒为单位进行设置
    • 是否只读:建议查询时设置为只读

1.3.TransactionStatus

事物的运行状态

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

二、基于XML的声明式事物控制

  • 声明式事物控制
    • Spring的声明式事物控制就是采用声明的方式来处理事务,xml中或者注解中配置事务来替代代码控制
  • 作用:
    • 事务管理器不侵入开发的组件。业务逻辑对象就不会意识到正在事务管理器之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要定义在文件中重新配置即可
    • 在不需要事务管理的时候,只要在设定文件上修改一下,即可移除事务管理服务,无需改变代码重新编译,这样维护起来方便
    • Spring声明式事物控制底层就是AOP

2.1.第一步:引入依赖包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

2.2.第二部:配置xml

<!--配置平台事务管理器-->
<bean id="transactionManager" class="DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>
<!--通知事务的增强-->
<tx:advice id="txAdvice" transaction-manger="transactionManager">
	<tx:attributes>
    	<tx:method name="*"/>
    </tx:attributes>
</tx:advice>
<!--配置事务的aop切入点-->
<aop:config>
	<aop:advisor advice-ref="txAdvice" pointcut="execution(* )"/>
</aop:config>

三、基于注解的声明式事物控制

事务注解驱动

<tx:annotation-driven transaction-manager="transactionManager">
@Transactional(设置隔离级别和传播行为),可以加在类上或者方法上。如果类和方法上都有,那具体的以方法为准
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值