1. 概述
Spring 事务管理是框架中确保数据库操作 原子性、一致性、隔离性和持久性 (ACID) 的核心机制。它支持声明式和编程式两种管理方式,其中声明式事务通过 @Transactional 注解实现,无需手动编写事务代码,大大简化了开发流程。
相较于编程式事务,声明式事务更易于维护和理解。关于事务的基本概念(如 ACID 的具体含义),这里不再赘述,我们直接聚焦于 Spring 中的实际配置与应用。
2. @Transactional 注解
作用与级别
@Transactional 提供了声明式事务管理能力。开发者只需在方法或类上添加此注解,Spring 容器就会自动处理事务的开启、提交和回滚。
- 作为类注解:为类中所有 public 方法生效。
- 作为方法注解:默认仅对 public 方法生效,非 public 方法通常会被忽略。
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {
private final UserService userService;
@Autowired
public TestController(UserService userService) {
this.userService = userService;
}
@Transactional
@RequestMapping("/test1")
public String test1(String userName, String password) {
UserInfo userInfo = new UserInfo();
userInfo.setUserName(userName);
userInfo.setPassword(password);
Integer result = userService.register(userInfo);
if (result == 1) {
log.info("test1 注册成功,userName:{},password:{}", userName, password);
}
return "注册成功";
}
}
在实际调用时,如果业务逻辑正常,数据会写入数据库;若抛出异常且符合回滚条件,事务会自动回滚。


