注解概述

是声明式事务管理编程中使用的注解

属性

属性 类型 描述
value String 可选的限定描述符,指定使用的事务管理器
propagation enum: Propagation 可选的事务传播行为设置
isolation enum: Isolation 可选的事务隔离级别设置
readOnly boolean 读写或只读事务,默认读写
timeout int (in seconds granularity) 事务超时时间设置
rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组
rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组
noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

用法

一般在要配置事务的public方法上使用,不要在接口或者接口方法上使用该注解(这是Spring的建议)

实现过程

引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.15</version>
</dependency>

配置Spring的事务处理

在Spring的配置文件声明事务管理器和配置基于注解的声明式事务

1
2
3
4
5
6
7
8
<!--声明事务管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

配置事务的方法

下面方法的作用:添加学生信息,然后查找一个id为1000的学生,如果这个学生存在,添加学生就成功

出现事务回滚的情况:如果出现NullPointerException就会发生事务回滚,如果出现RuntimeException也会回滚

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ResponseBody
@Transactional(rollbackFor = {NullPointerException.class})
@RequestMapping(value = "/test", produces = {"text/plain;charset=utf-8", "text/html;charset=utf-8"})
public String test() {
Student student = new Student();
student.setName("小明");
student.setAge(10);
//添加学生信息到数据库
studentService.add(student);
//在数据库中查找id为1000的学生,如果这个学生存在,上面的添加操作就成功
Student student1 = studentService.findById(1000);
System.out.println(student1.getId());
return "测试";
}

测试

序号 测试条件 结果
1 数据库中不存在id为1000的学生 报错,且添加学生不成功
2 数据库中存在id为1000的学生 添加学生成功