注解概述
是声明式事务管理编程中使用的注解
属性
属性 | 类型 | 描述 |
---|---|---|
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的建议)
实现过程
引入依赖
<!-- 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的配置文件声明事务管理器和配置基于注解的声明式事务
<!--声明事务管理器-->
<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也会回滚
@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的学生 | 添加学生成功 |