首页 > 其他分享 >Spring-12-事务

Spring-12-事务

时间:2022-10-31 15:01:07浏览次数:40  
标签:事务 12 -- Spring rollbackFor 方法 回滚 异常 id


Spring-12-事务_xml


Spring-12-事务_xml_02


Spring-12-事务_aop_03


Spring-12-事务_事务管理_04


Spring-12-事务_spring_05


Spring-12-事务_xml_06

Spring-12-事务_spring_07

文章目录

  • ​​1.使用注解写​​
  • ​​1.在ApplicationContext.xml写入代码​​
  • ​​2.在实现接口类的公共方法上面写注解​​
  • ​​方法一:​​
  • ​​方法二:​​
  • ​​2.使用在配置中实现​​
  • ​​第一步在pom中加入依赖(要使用aspectj框架)​​
  • ​​第二步:在applicationContext.xml的里面实例化​​

1.使用注解写

1.在ApplicationContext.xml写入代码

<!--使用spring的事务处理-->
<!--1. 声明事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--连接的数据库, 指定数据源-->
<property name="dataSource" ref="myDataSource" />
</bean>

<!--2. 开启事务注解驱动,告诉spring使用注解管理事务,创建代理对象
transaction-manager:事务管理器对象的id
-->
<tx:annotation-driven transaction-manager="transactionManager" />

2.在实现接口类的公共方法上面写注解

方法一:

/**
*
* rollbackFor:表示发生指定的异常一定回滚.
* 处理逻辑是:
* 1) spring框架会首先检查方法抛出的异常是不是在rollbackFor的属性值中
* 如果异常在rollbackFor列表中,不管是什么类型的异常,一定回滚。
* 2) 如果你的抛出的异常不在rollbackFor列表中,spring会判断异常是不是RuntimeException,
* 如果是一定回滚。
*
*/
/* @Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,
readOnly = false,
rollbackFor = {
NullPointerException.class, NotEnoughException.class
}
)*/

//使用的是事务控制的默认值, 默认的传播行为是REQUIRED,默认的隔离级别DEFAULT
//默认抛出运行时异常,回滚事务。

方法二:

直接写,使用的都是默认值

@Transactional

2.使用在配置中实现

Spring-12-事务_事务管理_08

第一步在pom中加入依赖(要使用aspectj框架)

<!--aspectj依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>

第二步:在applicationContext.xml的里面实例化

<!--声明式事务处理:和源代码完全分离的-->
<!--1.声明事务管理器对象-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource" />
</bean>

<!--2.声明业务方法它的事务属性(隔离级别,传播行为,超时时间)
id:自定义名称,表示 <tx:advice> 和 </tx:advice>之间的配置内容的
transaction-manager:事务管理器对象的id
-->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<!--tx:attributes:配置事务属性-->
<tx:attributes>
<!--tx:method:给具体的方法配置事务属性,method可以有多个,分别给不同的方法设置事务属性
name:方法名称,1)完整的方法名称,不带有包和类。
2)方法可以使用通配符,* 表示任意字符
propagation:传播行为,枚举值
isolation:隔离级别
rollback-for:你指定的异常类名,全限定类名。 发生异常一定回滚
-->
<tx:method name="buy" propagation="REQUIRED" isolation="DEFAULT"
rollback-for="java.lang.NullPointerException,com.bjpowernode.excep.NotEnoughException"/>

<!--使用通配符,指定很多的方法-->
<tx:method name="add*" propagation="REQUIRES_NEW" />
<!--指定修改方法-->
<tx:method name="modify*" />
<!--删除方法-->
<tx:method name="remove*" />
<!--查询方法,query,search,find-->
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>

<!--配置aop-->
<aop:config>
<!--配置切入点表达式:指定哪些包中类,要使用事务
id:切入点表达式的名称,唯一值
expression:切入点表达式,指定哪些类要使用事务,aspectj会创建代理对象

com.bjpowernode.service
com.crm.service
com.service
-->
<aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))"/>

<!--配置增强器:关联adivce和pointcut
advice-ref:通知,上面tx:advice哪里的配置
pointcut-ref:切入点表达式的id
-->
<aop:advisor advice-ref="myAdvice" pointcut-ref="servicePt" />
</aop:config>


标签:事务,12,--,Spring,rollbackFor,方法,回滚,异常,id
From: https://blog.51cto.com/u_15854304/5809776

相关文章