• @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. }

  • 相关阅读:
    【C++】模板初阶 【 深入浅出理解 模板 】
    C++征途 --- STL中的常用算法(下)
    手写call方法
    Java基础——反射
    MFC工具栏按钮点击,响应消息
    Java(集合框架01)
    MobileViT v3论文超详细解读(翻译+精读)
    一文读懂标量、向量、矩阵、张量的关系
    使用OfficeTool免费安装Office
    Mac电脑系统降级至10.15 Catalina(2020末代intel)
  • 原文地址:https://blog.csdn.net/m0_56750901/article/details/125476688