Spring 事务管理
Spring 事务管理
事务的隔离级别:4个
-
READ_UNCOMMITTED: 读未提交。为解决任何并发问题。
-
READ_COMMITTD: 读已提交。解决脏读,存在不可重复读与幻读
-
REPEATABLE_READ: 可重复读。解决脏读、不可重复读,存在幻读
-
SERIALIZABLE: 串行话。不存在并发问题。
事务超时时间
默认为-1
事务的传播行为:7个
- PROPAGATION_REQUIRED 指定方法必须在事务内执行 有事务执行 没有事务事务
- PROPAGATION_REQUIRED NEW 创建一个自己的事务 当前有事务,挂着 新建事务执行完毕 在执行当前事务
- PROPAGATION_SUPPORTS 支持事务 有事务执行 没有事务也可执行
- 重点掌握上面三个
- PROPAGATION_MANDATORY PROPAGATION_NESTED PROPAGATION_NEVER PROPAGATION_NOT_SUPPORTED
事务提交,事务回滚的时机
- 方法执行没有异常抛出,执行提交事务。 commit
- 方法执行抛出异常或错误,执行事务回滚。 rollback
- 方法抛出受查异常时,提交事务 写代码的时候必须处理的异常IOException
总结Spring的事务
- 管理事务的时 事务管理和他的实现类
- Spring的事务是一个统一模型
- 指定要使用的事务管理器实现类,使用
- 指定那些类,那些方法需要加入事务的功能
- 指定方法需要的隔离级别,传播行为,超时
- 指定要使用的事务管理器实现类,使用
Spring框架中提供的处理事务方案
-
适合中小项目使用的,注解方案
- spring框架自己用aop实现给业务方法增加业务的功能,使用@Transactional注解增加事务
- @Transctional注解是spring框架自己的注解,放在public方法的上面,表示当前方法具有事务。可以给注解的属性赋值,表示具体的隔离级别,传播行为,异常信息等
-
适合大型项目使用的,aspectj 需要大量事务配置事务,使用aspectj框架功能,在spring配置文件中声明类,方法需要的事务。这种方式业务方法和事务配置完全分离。
-
实现步骤:都是在xml配置文件中实现的
-
加入依赖
-
声明事务管理器对象
<bean id="xx" class="DatasourceTransactionManager">
-
声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)
-
配置aop:指定那些类需要代理
<tx:advice id="myAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--tx:method:给具体方法配置事务属性,method可以有多个 name:方法名称 完整方法名称,可以使用通配符 propagation:传播行为,枚举值 isolation:隔离级别 rollback-for:指定异常的类名,全限定类名。发生异常回滚 --> <tx:method name="" propagation="" isolayion="" rollback-for=""/> </tx:attributes> </tx:advice>
<aop:config> <!--配置切入点表达式:指定那些包中类,要使用事务 id:切入点表达式的名称,唯一值 expression:切入点表达式,指定那些类要使用事务,aspectj会创建代理对象 --> <aop:pointcut id="sevicePt" expression="execution=(* *..service..*.*(..))"/> <!--配置增强器:关联advice和pointcut--> <aop:advicor advice-ref="myAdvice" pointcut-ref="sevicePt" </aop:config>
-
-
-
@Transactional
-
织入到public方法中,实现事务管理
- propagation:用于设置事务的传播属性。该属性类型为Propagation枚举,默认值为 Propagation_REQUIRED
- isolation: 用于设置事务的隔离级别。该属性类型为laolation枚举。默认值为isolation.DEFAULT
- readOnly:用于设置该方法对数据库的操作是否是只读的。该属性为boolean,默认值false
- timeout:用于设置本操作与数据库连接的超时时限。单位为秒,类型为int,默认值为-1,即没有时限
- rollbackFor:执行需要回滚的异常类。类型为CLass[] ,默认值为空数组。
- rollbackForClassName:指定需要回滚的异常类类名,类型为String[],默认值为空数组
- noRollbackFor:发生异常不回滚
- noRollbackForClassName:发生不回滚
-
事务@Transactional步骤:
-
需要声明事务管理器对象:
<bean id="xx" Class="DataSourceTransactionManager"/>
-
开启事务注解驱动,告诉spring框架,我要使用注解方式管理事务。
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码