spring事务什么时候执行

fiy 其他 38

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring事务的执行时机取决于使用的事务管理策略和事务配置。

    首先,Spring的事务管理策略有两种:编程式事务管理和声明式事务管理。

    1. 编程式事务管理:在代码中手动通过编程控制事务的开始、提交、回滚等操作。这种方式下,事务的执行时机完全由程序员控制,可以更灵活地管理事务,但代码的可维护性较差。

    2. 声明式事务管理:通过配置文件或注解的方式声明事务的属性和切入点,由Spring在运行时自动管理事务。在声明式事务管理中,可以通过配置指定事务的执行时机。常用的事务执行时机有:

    • 前置通知(Before advice):事务在方法调用之前开始。
    • 后置通知(After advice):事务在方法调用之后提交或回滚。
    • 返回通知(After-returning advice):事务在方法成功返回后提交。
    • 异常通知(After-throwing advice):事务在方法抛出异常后回滚。
    • 环绕通知(Around advice):事务在方法的前后都可以执行,可以手动控制事务的开始、提交、回滚。

    其次,事务的执行时机还与事务的传播行为相关。事务的传播行为定义了在嵌套事务中如何处理事务。常用的事务传播行为有:

    • REQUIRED:如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。
    • REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务,并暂停当前事务(如果存在)。
    • NESTED:如果当前存在事务,则在当前事务中嵌套一个新的事务,如果不存在事务,则创建一个新的事务。

    总之,Spring事务的执行时机由事务管理策略、事务配置和事务传播行为共同决定。在声明式事务管理中,通过配置或注解可以灵活地指定事务的开始、提交、回滚的时机,同时还可以通过事务传播行为控制事务的嵌套行为。

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

    Spring事务的执行时机主要取决于事务管理器的配置以及事务的传播行为设置。

    1. 事务的执行时机取决于事务管理器的配置。在Spring中,可以配置多种类型的事务管理器,如JDBC事务管理器、JTA事务管理器、Hibernate事务管理器等。事务管理器负责管理事务的开始、提交或回滚。当Spring应用程序调用一个被事务注解标记的方法时,事务管理器会在方法执行之前启动一个事务,并在方法执行结束后提交或回滚事务。

    2. 事务的执行时机还受事务的传播行为设置的影响。Spring事务支持多种传播行为,如REQUIRED、REQUIRES_NEW、NESTED等。传播行为定义了事务在不同调用层次中的行为表现。比如,当方法A调用方法B时,方法A已经启动了一个事务,这时方法B的传播行为设置为REQUIRED,则方法B会加入方法A的事务中,并在方法B执行完后一起提交或回滚;如果方法B的传播行为设置为REQUIRES_NEW,则方法B会启动一个新的事务,并在方法B执行完后独立提交或回滚。

    3. 在有注解的方式下,事务的执行时机通常是在被事务注解标记的方法开始执行时。Spring提供了多种事务注解,如@Transactional、@Transactional(propagation=Propagation.REQUIRED)等。当被注解标记的方法被调用时,Spring框架会自动检测该方法是否需要开启事务,并根据事务管理器的配置和传播行为的设置来确定事务的执行时机。

    4. 除了注解方式,Spring还提供了基于XML配置的事务管理器和事务通知。在XML配置中,可以通过配置事务管理器和事务通知来定义事务的属性和执行时机。

    5. 此外,事务的执行时机也取决于被事务注解标记的方法是否被其他方法调用。如果被注解标记的方法是应用程序中的顶级调用,事务会在该方法开始执行时启动,结束执行时提交或回滚。但如果该方法是被其他方法调用的,事务的执行时机将会受到调用方方法的事务传播行为的影响。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring事务是在方法执行期间执行的。具体来说,当一个方法被标记为事务时,Spring会在方法开始之前开启事务,在方法结束之后提交或回滚事务。

    下面是Spring事务的执行流程:

    1. Spring事务管理器接收到一个方法调用。
    2. 确定当前方法是否标记为事务。这可以通过在方法上添加@Transactional注解或通过配置文件进行定义。
    3. 如果方法标记为事务,则Spring事务管理器开启一个新的事务。这包括创建一个新的数据库连接或从连接池中获取一个连接。
    4. 方法体开始执行,包括数据库操作、业务逻辑等。
    5. 如果方法执行期间发生异常,Spring事务管理器会捕获异常并根据事务的设置来决定是回滚事务还是提交事务。
    6. 如果方法执行完成且没有发生异常,Spring事务管理器会提交事务。这将导致数据库中的更新操作在事务提交之后变得可见。
    7. Spring事务管理器关闭事务(即关闭数据库连接)。

    需要注意的是,Spring事务的执行依赖于方法调用。如果一个方法调用另一个标记为事务的方法,那么内部方法将在外部方法的事务内执行。这样可以确保在外部方法回滚时,内部方法的操作也会回滚。

    另外,Spring事务还支持事务的传播行为。通过设置@Transactional注解或配置文件中的propagation属性,可以定义事务在不同方法间的传播方式。例如,使用REQUIRED表示方法必须在事务中运行,使用REQUIRES_NEW表示方法使用新的事务运行,与外部方法的事务无关。

    总结起来,Spring事务是在方法执行期间执行的。它通过事务管理器开启、提交或回滚事务,并在方法执行期间捕获异常。Spring事务还支持事务传播行为,确保方法在事务内运行并保持事务的一致性。

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

400-800-1024

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

分享本页
返回顶部