• @Transactional注解介绍


    @Transactional注解是spring中常用的注解之一,通常情况下我们在需要对一个service方法添加事务时,加上这个注解,如果发生unchecked exception,就会发生rollback

    Mybatis会自动参与到spring事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可,否则事务管理会不起作用

    属性类型描述
    valueString可选的限定描述符,指定使用的事务管理器
    propagationenum: Propagation可选的事务传播行为设置
    isolationenum: Isolation可选的事务隔离级别设置
    readOnlyboolean读写或只读事务,默认读写
    timeoutint (in seconds granularity)事务超时时间设置
    rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
    rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
    noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
    noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数组

    @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义

    虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。但是这个被注解的方法将不会展示已配置的事务设置。

    默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

    1. @Transactional(readOnly = true)
    2. public class DefaultFooService implements FooService {
    3. public Foo getFoo(String fooName) {
    4. // do something
    5. }
    6. // these settings have precedence for this method
    7. //方法上注解属性会覆盖类注解上的相同属性
    8. @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    9. public void updateFoo(Foo foo) {
    10. // do something
    11. }
    12. }

  • 相关阅读:
    React 从入门到精通——本文来自AI创作助手
    计算机网络:随机访问介质访问控制之令牌传递协议
    luffy-(7)
    C语言描述数据结构 —— 二叉树(3)普通二叉树
    人工智能学习:载入MNIST数据集(1)
    直流有刷电机开环调速基于STM32F302R8+X-NUCLEO-IHM07M1(二)
    ssm欢欢宠物医院管理系统的设计与实现毕业设计源码171734
    C3P0反序列化链学习
    程序员的爱恨交织与双标态度
    mybatis-plus自带的乐观锁
  • 原文地址:https://blog.csdn.net/m0_56750901/article/details/125476688