ToB企服应用市场:ToB评测及商务社交产业平台

标题: Spring5学习随笔-事务属性详解(@Transactional) [打印本页]

作者: 耶耶耶耶耶    时间: 2024-1-3 12:27
标题: Spring5学习随笔-事务属性详解(@Transactional)
学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】
第三章、Spring的事务处理

1.什么是事务?

事务是保证业务操作完整性的一种数据库机制
事务的4特点:ACID
2.如何控制事务

JDBC:
Connection.setAutoCommit(false)
Connection.commit();
Connection.rollback();
Mybatis:
Mybatis自动开启事务
SqlSession(底层还是Connection).commit();
sqlSession(底层还是Connection).rollback();
结论:控制事务的底层 都是Connection对象完成的
3.Spring控制事务的开发

Spring是通过AOP的方式进行事务开发
4.Spring控制事务的编码

  1. <dependency>
  2.     <groupId>org.springframework</groupId>
  3.     <artifactId>spring-tx</artifactId>
  4.     <version>5.1.14.RELEASE</version>
  5. </dependency>
复制代码
  1. <bean id="userService" >
  2.     <property name="userDao" ref="userDao"/>
  3. </bean>
  4. <bean id="dataSourceTransactionManager" >
  5.     <property name="dataSource" ref="dataSource"/>
  6. </bean>
  7. 3.切入点
  8. @Transactional
  9. public class UserServiceImpl implements UserService {
  10.     private UserDao userDao;
  11. <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
复制代码
第四章、Spring中的事务属性(Transaction Attribute)

1.什么是事务属性

属性:描述物体特征的一系列值
性别 身高 体重…
所谓的事务属性指的是描述事务特征的一系列值
2.如何添加事务属性

@Transactional(isolation(隔离属性)=,propagation(传播属性)=,readOnly(只读属性)=,timeout(超时属性)=,rollbackFor=,noRollbackFor=);
3.事务属性详解

1.隔离属性(ISOLATION)

2.传播属性(PROPAGATION)

融合指的是:放弃自己的事务,以外部的事务为准
3.只读属性(readOnly)

针对于只进行查询操作的业务方法,可以加入只读属性,提供运行效率
默认值:false
4.超时属性(timeout)

指定了事务等待的最长时间
5.异常属性

Spring事务处理过程中
默认 对于RuntimeException及其子类 采用的是回滚的策略
默认 对于Exception及其子类 采用的是提交的策略
想要改变默认的策略,可以设置两个属性
  1. @Transactional(rollbackFor = {Exception.class},noRollbackFor = {RuntimeException.class})
复制代码
建议:实战中使用RuntimeException及其子类 使用事务异常属性的默认值,实际开发很少改变策略
4.事务属性常见配置总结

后续实战当中的建议:增删改操作 @Transactional
而对于查询操作  @Transactional(propagation=Propagation.SUPPORTS,readOnly=true)
5.基于标签的事务配置方式(事务开发的第二种形式)

  1. <bean id="userService" >
  2.     <property name="userDao" ref="userDao"/>
  3. </bean>
  4. <bean id="dataSourceTransactionManager" >
  5.     <property name="dataSource" ref="dataSource"/>
  6. </bean>
  7. 3.切入点
  8. @Transactional
  9. public class UserServiceImpl implements UserService {
  10.     private UserDao userDao;
  11. <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
复制代码
  1. <bean id="userService" >
  2.     <property name="userDao" ref="userDao"/>
  3. </bean>
  4. <bean id="dataSourceTransactionManager" >
  5.     <property name="dataSource" ref="dataSource"/>
  6. </bean>
  7. <tx:advice id="txAdvice" transacation-manager="dataSourceTransactionManager">
  8.                 <tx:attributes>
  9.                                 <tx:method name="register" isolation="DEFAULT" propagation=""/>
  10.                                 <tx:method name="login"...../>
  11.                 </tx:attributes>
  12. </tx:advice>
  13. <aop:config>
  14.                 <aop:pointcut id="pc" expression="execution(* com.baizhi.service.UserServiceImpl.register(..))"/>
  15.                 <aop:advisor advice-ref="" pointcut-ref="">
  16. </aop:config>
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4