首页 > 基础资料 博客日记
java中@Transactional详解
2024-09-23 00:00:06基础资料围观114次
文章java中@Transactional详解分享给大家,欢迎收藏Java资料网,专注分享技术知识
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在Java中,@Transactional是一个非常重要的注解,用于声明事务管理的行为。它可以被应用在类级别或方法级别上,并且提供了多种选项来控制事务的传播行为、隔离级别、超时设置和回滚条件等。
一、作用范围
@Transactional注解可以用于以下两个级别:
- 类级别:当应用在类上时,表示类中的所有方法都将按照相同的事务属性进行处理。
- 方法级别:当应用在方法上时,仅对该方法内的数据库操作生效。
二、常用属性
- propagation:事务的传播行为,默认值是Propagation.REQUIRED。它定义了在方法调用链中已存在事务时,当前方法如何处理事务。例如,REQUIRED表示如果已存在事务,则加入该事务;REQUIRES_NEW表示无论是否存在事务,都会开启一个新事务。
- isolation:事务的隔离级别,默认值是Isolation.DEFAULT。它定义了事务在并发情况下的隔离程度,包括未提交读、提交读、可重复读和串行化等级别。
- timeout:事务超时时间,默认值是TransactionDefinition.TIMEOUT_DEFAULT,单位为秒。如果事务在超时时间内没有完成,则自动回滚。
- readOnly:指定事务是否为只读事务,默认值是false。如果设置为true,则表示这个事务只读取数据但不修改数据,这样可以帮助数据库系统优化事务。
- rollbackFor /
rollbackForClassName:定义在哪些异常发生时需要回滚事务。可以指定异常类或异常类名的列表。例如,@Transactional(rollbackFor = Exception.class) 表示遇到任何异常都会回滚事务。 - noRollbackFor / noRollbackForClassName:定义在哪些异常发生时不需要回滚事务。
三、使用示例
以下是一个简单的示例,演示了如何在Spring Boot中使用@Transactional注解:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false, timeout = 30)
public void updateUser(User user) {
// 更新用户信息
userRepository.save(user);
}
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void createUser(User user) {
// 创建用户
userRepository.save(user);
}
}
在上述示例中,updateUser方法使用了默认的事务属性,而createUser方法则显式指定了事务传播行为为REQUIRES_NEW,并设置了隔离级别为READ_COMMITTED。
四、注意事项
- @Transactional注解只对public方法有效,因为它是通过Spring AOP来实现的。
- 默认情况下,@Transactional只回滚RuntimeException及其子类异常,而不回滚Checked
Exception。如果需要回滚其他类型的异常,可以通过rollbackFor属性指定。 - 在SpringBoot中,通常建议在Service层使用@Transactional来管理事务,而不是在Controller或Repository层使用。
总结
@Transactional是一个强大的事务管理工具,通过它可以方便地控制事务的行为,确保数据库操作的一致性和完整性。
文章来源:https://blog.csdn.net/qq_45072503/article/details/140137220
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: