Spring基于注解的声明式事务允许通过在方法上添加注解来管理事务,而无需编写繁琐的事务管理代码。通过在方法上添加注解,可以指定事务的传播行为、隔离级别、超时时间、只读属性等。
1. 传播行为(Propagation)
控制事务方法如何与现有事务进行交互。
- REQUIRED :如果当前
存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。 - REQUIRES_NEW :始终通过创建一个新的事务来执行该方法;如果当前存在事务,则将其挂起。
- 其他传播行为包括 SUPPORTS 、 MANDATORY 、 NESTED 等。
2. 隔离级别(Isolation)
定义事务的隔离级别,控制事务之间的相互影响。
- READ_UNCOMMITTED :允许事务读取未提交的数据修改。
- READ_COMMITTED :确保事务只能读取已提交的数据。
- 其他隔离级别包括 REPEATABLE_READ 、 SERIALIZABLE 等。
3. 超时时间(Timeout)
设置事务的超时时间,单位为秒,默认为-1(永不超时)。
4. 只读属性(ReadOnly)
指示事务是否为只读事务,如果为true,则不允许进行写操作。
代码如下:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = false)
public void updateUserEmail(Long userId, String newEmail) {
// 更新用户邮箱操作
}
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void createUser(String name, String email) {
// 创建用户操作
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = true)
public User getUserById(Long userId) {
// 查询用户操作
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void deleteUser(Long userId) {
// 删除用户操作
}
}
@Transactional 注解被用于标记事务方法,并设置了不同的事务属性。这样,Spring会根据注解配置来管理事务的行为。
原文链接: https://blog.csdn.net/2401_82884096/article/details/137856879