springboot中@Transactional注解的使用

1、引入依赖

首先,确保你的Spring Boot项目中包含了对事务支持的依赖。对于大多数应用场景,Spring Boot会自动引入事务管理相关的依赖。但如果你需要手动添加,可以检查spring-boot-starter-data-jpa(针对JPA)或spring-boot-starter-jdbc(针对JDBC)等起步依赖是否已经存在于你的pom.xmlbuild.gradle文件中。

2、使用@Transactional注解

在Service层的方法上添加@Transactional注解,以声明该方法需要在一个数据库事务中执行。例如:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional // 默认配置,遇到运行时异常(RunTimeException及其子类)会自动回滚事务
    public void createUser(User user) {
        userRepository.save(user);
        // 其他业务逻辑...
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW) // 需要一个新的事务,即使外层有事务,该方法也会在自己的事务中执行
    public void updateUserName(User user, String newName) {
        user.setName(newName);
        userRepository.save(user);
    }
}

3、@Transactional属性说明

  • propagation:事务的传播行为,默认为REQUIRED,即如果当前存在事务,则加入当前事务;如果不存在,则创建一个新的事务。
  • isolation:事务的隔离级别,默认为数据库的默认隔离级别。
  • readOnly:是否为只读事务,默认为false
  • timeout:事务的超时时间,默认为-1,表示没有超时限制。
  • rollbackFor:遇到指定的异常时回滚事务,可以指定多个异常类。
  • noRollbackFor:遇到指定的异常时不回滚事务。

 4、注意事项

  • 确保@Transactional注解的方法被Spring管理的Bean调用。直接在main方法或其他非Spring管理的类中调用不会生效。
  • @Transactional应放在public方法上。虽然它也可以用于protected或private方法,但必须确保代理模式正确设置,通常建议将其放在public接口方法上。
  • 异常处理会影响事务的回滚。默认情况下,只有运行时异常(继承自RuntimeException的异常)会导致事务回滚。如果你想在遇到特定的已检查异常时也回滚事务,需要使用rollbackFor属性。(此条一定注意,在使用自定义异常时一定要继承RuntimeException
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值