首页 > 编程知识 正文

transactional怎么读,spring transactional

时间:2023-05-04 10:46:01 阅读:106067 作者:859

文章目录@Transactional属性@Transactional用法解决方案

@Transactional属性

@Transactional的用法@Transactional可以应用于接口、接口方法、类和类方法。 在类中使用时,该类的所有公共方法都具有该类型的事务属性,并且还可以在方法级别使用标注来重写类级别的定义。

虽然可以将@Transactional注释应用于接口、接口方法、类和类方法,但Spring建议您不要在接口或接口方法中使用注释。 只有在使用基于接口的代理时,这才有效。 另外,@Transactional注释应该只适用于public方法,这是由Spring AOP的本质决定的。 如果以protected、private或默认可见性方式使用@Transactional注释,则此选项将被忽略,并且不会抛出异常。

缺省情况下,AOP代理仅捕获外部方法调用。 这意味着,如果调用由@Transactional注释限定的方法,则当类内部的方法调用类内部的其他方法时,不会发生事务行为。

注意:开发时添加注释往往无法回滚

原因:只有在发生未捕获的运行时执行时,缺省spring事务才会回滚

spring aop异常捕获原理:阻止的方法必须显式抛出异常,并且不进行任何处理。 这样,aop代理就可以捕获并回滚方法的异常。 缺省情况下,aop仅捕获RuntimeException异常,但配置可以捕获并回退某些异常

也就是说,service方法不使用try catch,或者在catch的末尾加上throw new runtimeexcetpion () ),以便在程序出现异常时被aop捕获并回滚。

如果service层方法抛出RuntimeException异常,而Catch需要抛出自定义异常,则只有自定义异常继承RuntimeException。 继续捕获和处理此异常。

servicelayer方法的catch语句包含transactionaspectsupport.currenttransactionstatus ().setRollbackOnly;

语句,手动回滚,使高层不需要处理异常

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。