spring的事务什么时候开始

不及物动词 其他 49

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring的事务在方法调用的时候开始。当一个被@Transactional注解修饰的方法被调用时,Spring会首先为该方法创建一个事务上下文,并将该上下文绑定到当前的线程中。

    事务的开始时机取决于方法的调用,当一个方法被调用时,如果该方法被@Transactional注解修饰,Spring会在方法执行之前开启一个事务。事务的开始意味着该方法及其对应的数据库操作会被封装在一个事务中,保证这些操作要么全部成功提交,要么全部失败回滚。

    事务的开始涉及到底层的事务管理器的操作,Spring通过事务管理器控制着事务的开始、提交、回滚等操作。事务管理器负责调用数据库的事务管理功能,如JDBC的事务管理。

    事务的开始可以发生在多个场景下,比如:

    1. 当一个被@Transactional注解修饰的方法被其他方法调用时,事务会在该方法开始执行前开始。

    2. 在方法内部嵌套调用其他被@Transactional注解修饰的方法时,事务会在内部方法开始执行前开始。

    3. 在程序中手动调用带有@Transactional注解的方法时,事务会在该方法开始执行前开始。

    需要注意的是,事务的开始并不意味着数据库操作的执行,而只是开启了一个事务上下文。实际的数据库操作是在方法体内部执行的,若方法内部存在多个数据库操作,它们会在事务的上下文中依次执行,直至方法执行完毕后,再决定是提交事务还是回滚事务。

    总之,Spring的事务在方法调用的时候开始,并且受事务管理器的控制。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring的事务可以在方法调用之前、之后或者异常抛出时开始。具体取决于事务的传播行为和事务的隔离级别。

    1. 方法调用之前开始事务:在方法被调用前,事务就已经开始了。这种情况下,事务的开始是在@Transaction注解修饰的方法执行之前,Spring会通过AOP技术在方法执行前开启事务。

    2. 方法调用之后开始事务:在方法被调用后,事务才开始。这种情况下,事务的开始是在@Transaction注解修饰的方法执行完毕后,Spring会根据方法的返回值决定是否提交事务。如果方法成功执行,事务将被提交,否则事务会被回滚。

    3. 异常抛出时开始事务:在方法执行过程中,如果发生异常,则事务会在异常抛出时开始。这种情况下,如果方法抛出了一个受检查异常或者未受检查异常,则事务会被回滚。

    Spring事务还可以通过设置事务传播行为来指定事务的开始时机。

    • REQUIRED事务传播行为:默认的传播行为,如果当前存在事务,则加入到该事务中;如果没有事务,则新建一个事务。

    • REQUIRES_NEW事务传播行为:每次都会创建一个新的事务,如果当前存在事务,则挂起当前事务。

    • MANDATORY事务传播行为:如果当前存在事务,则加入到该事务中;如果没有事务,则抛出异常。

    • SUPPORTS事务传播行为:如果当前存在事务,则加入到该事务中;如果没有事务,则以非事务的方式执行。

    • NOT_SUPPORTED事务传播行为:以非事务的方式执行,如果当前存在事务,则挂起当前事务。

    总之,Spring的事务可以在方法调用之前、之后或者异常抛出时开始,具体取决于事务的传播行为和隔离级别的设置。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring的事务是在方法调用之前开始的。

    在Spring框架中,事务是通过AOP(面向切面编程)实现的。Spring采用了声明式事务的方式,可以通过配置文件或注解的方式来定义事务。

    1. 配置文件方式:
      在Spring的配置文件中,可以使用tx:advice元素来定义事务的属性。这个元素可以配置事务的传播特性、隔离级别、超时时间等属性。可以通过tx:method元素来定义事务的方法级别的属性。

    2. 注解方式:
      在Spring中,可以使用@Transactional注解来定义事务。通过在方法上加上@Transactional注解,可以指定事务的传播特性、隔离级别等属性。

    当Spring启动时,会扫描带有@Transactional注解的方法,并根据注解中定义的事务属性来创建事务代理。当调用带有@Transactional注解的方法时,Spring会在方法执行之前创建一个事务,并在方法执行完毕后提交或回滚事务。

    事务的开始时间取决于事务的传播特性。如果事务的传播特性为REQUIRED,则事务会在方法调用之前开始。如果事务的传播特性为REQUIRES_NEW,则事务会在方法调用之前创建一个新的事务。如果事务的传播特性为NESTED,则事务会在方法调用之前开始一个嵌套的事务。

    需要注意的是,Spring事务的开始时间并不是物理意义上的事务开始时间,而是指事务的逻辑开始时间。实际上,数据库事务在执行DML(数据操作语言)语句时才会真正开始。因此,事务开始的时间可能早于数据库事务的开始时间。虽然事务的开始时间可能早于数据库事务的开始时间,但是只有在方法执行完毕后,事务才会提交或回滚。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部