600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > spring事务注解@Transactional参数详解

spring事务注解@Transactional参数详解

时间:2023-08-26 14:08:07

相关推荐

spring事务注解@Transactional参数详解

在Spring中进行事务管理操作有两种方式:编程式事务管理和声明式事务管理。这里介绍的是第二种方式。

1、声明式事务管理(底层使用AOP原理):

1>基于注解方式.(本文章基于注解)

2>基于xml方式

2、 基于注解方式实现事务管理

1> Spring事务管理api,提供一个接口,代表事务管理,这个接口针对不同的框架提供不同的实现类:DataSourceTransactionManager

2>步骤:

1>创建实现类 DataSourceTransactionManager,指定数据源的部分:

<!--数据源采用spring的--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;serverTimezone=GMT&amp;useSSL=false&amp;characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="wuhuai123"/></bean><!-- 开启事务--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 开启事务扫描注解--><tx:annotation-driven transaction-manager="transactionManager"/>

2>使用注解在service类上或者在service的方法加入事务的注解@Transactional:

@Service@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ,rollbackFor =NullPointerException.class)public class UserService {@Resourceprivate StudentDao studentDao;public List<Student> queryUser(){return studentDao.query();}}

3、事务注解的相关参数:

1、propagation:事务的传播行为:

此参数包含 7种传播行为:

下面列举出两种传播行为的例子,因为实际开发中用的比较多:

REQUIRED:如果add方法本身就有事务,调用update方法之后,使用add当前的事务,若没有,则创建新的事务。

REQUIRED_NEW:当前的方法必须启动新的事务,add方法调用update方法,不管add方法是否有事务,都会创建新的事务。

2、isolation:事务的隔离级别

背景: 事务有特性称为隔离性,多事务操作之间不会产生影响,不考虑隔离性产生很多问题.

1>脏读:一个未提交事务读取到另外一个未提交事务的数据.

2>不可重复读:一个未提交的事务读取到另外一个事务修改之后的数据.

3>幻读:一个未提交的事务读取到另外一个事务添加的数据.

通过设置事务的隔离级别来解决读的问题:

MySQL默认隔离级别为:可重复读.

3、timeout:超时时间

事务需要在一定时间内进行提交,若超时,则回滚,默认为-1,表示不超时.

4、readONLY:是否只读

读:查询操作, 写:增删改操作.

默认值为false,可以读写.

5、rollbackFor:回滚

设置出现哪些异常,则进行回滚

6、noRollbackfor:不回滚

设置出现哪些异常,不回滚.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。