Spring框架 声明式事务

声明式事务

分类

①编程式事务
由程序员来编写事务控制代码
②声明式事务
事务控制代码已经由Spring完成,程序员只需声明那些方法进行事务控制和如何控制

特点

①针对于ServiceImpl类下方法
②基于通知(advice)
③依赖于AOP
在这里插入图片描述

实现

①添加命名空间:xmlns:tx、xmlns:aop(依赖于aop)和xsi:schemalocatio
②事务管理器:org.springframework.jdbc.datasource.DataSourceTransactionManager
事务管理器需连接数据库:datasource(属性赋值)
③事务处理:

<tx:advice id="" transaction-manager="事务管理器bean id">
	<tx:attributes>
		<!--控制具体哪些方法的事务,支持通配符如upd*(所有更新数据库数据操作)-->
   		<tx:method name="方法名"/>
  	</tx:attributes>
 </tx:advice>

添加切点:事务可能存在的范围,(范围大一点)
添加通知:advice-ref=“tx:advice id”
如:

<!-- 数据库源 -->   
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     	<property name="DriverClassName" value=""></property>
     	<property name="url" value=""></property>
     	<property name="username" value=""></property>
     	<property name="password" value=""></property>
</bean>
<!--可配置mybatis等数据库操作框架进行相关数据处理-->
<!-- 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     	<property name="dataSource" ref="datasource"></property>
</bean>
<!-- 切点配置(需要进行事务管理的方法所在位置) -->
<aop:config>
     	<aop:pointcut expression="execution(com.mfqh.service.*())" id="txCut"/>
     	<aop:advisor advice-ref="txManager" pointcut-ref="txCut"/>
</aop:config>
<!-- 事务管理 -->
<tx:advice>
     	<tx:attributes>
      		<tx:method name="sel*"/>
     	</tx:attributes>
</tx:advice>

tx:method元素所具有的属性

①name,为需要事务的方法
②readonly=“boolean”,是否只读(只读事务效率较高,提升性能),查询语句使用(true),默认false

③propagation,控制事务传播行为
Ps:事务传播行为(当一个具有事务控制的方法被另一个有事务控制管理的方法调用)
REQUIDER(默认值):若当前有事务,则被调用的方法就不创建事务,在当前事务中执行;若没有,就创建
SUPPORTS:若当前有事务就在事务中执行;若没有就在非事务状态下执行
MANDATORY:必须在事务内部执行,若有事务,执行;若没事务,报错
REQUIRES_NEW:若当前有事务,挂起,新建一个;若没事务,新建,确保两个事务的相对独立
NOT_SUPPORTED:若当前有事务,挂起;若没事务,执行,即中间部分不进行事务管理
NEVER:若当前有事务,报错;若没事务,执行
NESTED:若当前有事务,创建嵌套事务(子事务和主事务有关联);若没事务,新建

④isolation,事务隔离级别
DEAFULT:默认值,由底层数据库自动判断该使用什么隔离级别
READ_UNCOMMITED:读未提交,可以读取读未提交的数据,效率最高
READ_COMMITED:读已提交,只能读取其他事务已提交数据
REPEATABLE_READ:可重复读,要读取的数据被加锁
SERIALIZABLE:序列化,排队操作,对整个表加锁,最安全,效率最低

⑤rollback-for,异常回滚
值为异常类型全限定路径,当手动抛异常,一定添加该属性
⑥no-rollback-for,异常不回滚(用于某些特定异常,停止当前执行)

发布了82 篇原创文章 · 获赞 1 · 访问量 1450

猜你喜欢

转载自blog.csdn.net/qq_41891805/article/details/105191256