spring默认跑出什么回滚
-
Spring默认使用的是声明式事务管理,当一个方法抛出未捕获的异常时,Spring会自动回滚事务。
具体来说,Spring中的事务管理器会拦截由@Transactional注解标识的方法,然后在方法执行前开启事务,在方法执行后根据方法的执行情况决定是提交事务还是回滚事务。
当方法执行过程中出现未捕获的异常时,事务管理器会将该异常作为触发回滚的信号,然后回滚当前方法的事务。回滚操作会将事务中的所有数据库操作都撤销,使数据回滚到事务开始之前的状态。
需要注意的是,Spring默认情况下只会回滚RuntimeException及其子类异常,对于非RuntimeException及其子类异常,默认是不会回滚的。如果需要让非RuntimeException异常也回滚事务,可以在@Transactional注解上使用rollbackFor属性,指定需要回滚的异常类型。
另外,还可以通过在方法中手动调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()方法来指定当前事务回滚,即使方法没有抛出异常。
总之,Spring默认情况下会回滚未捕获的RuntimeException异常及其子类异常,可以通过设置rollbackFor属性来指定回滚其他异常,也可以通过手动设置事务回滚来控制回滚的条件。
1年前 -
Spring框架中,默认情况下,当发生未捕获的异常时,事务会自动进行回滚操作。Spring通过持久化存储和编程式事务管理来实现回滚。
-
编程式事务
在Spring中,我们可以使用编程式的方式管理事务。当在事务开始之前的代码中抛出异常时,Spring会自动回滚事务。编程式事务管理需要手动编写事务管理的代码,并使用事务管理器来控制事务的开始、提交和回滚。 -
声明式事务
Spring还提供了声明式事务管理的方式,通过事务注解来管理事务。使用@Transactional注解标记的方法,如果发生未捕获的异常,Spring会自动回滚事务。通过在方法上添加@Transactional注解,可以将方法纳入事务管理的范围内。 -
默认回滚策略
在Spring中,默认情况下,当发生RuntimeException及其子类异常时,事务会自动回滚。这些异常包括但不限于NullPointerException、IllegalArgumentException、IllegalStateException等等。而对于非RuntimeException及其子类异常,Spring默认不进行回滚。 -
自定义回滚策略
除了使用默认的回滚策略外,我们还可以根据需要自定义回滚策略。通过在@Transactional注解中设置rollbackFor属性,我们可以指定在发生哪些异常时执行回滚操作。例如,@Transactional(rollbackFor = {Exception.class})表示发生任何异常时都执行回滚操作。 -
异常处理
当程序抛出异常时,我们可以通过try-catch块来捕获异常,并对异常进行处理。如果我们在异常处理代码中手动触发了回滚操作,Spring会根据当前的事务管理策略进行事务的回滚。
总结:
在Spring中,默认情况下,当发生未捕获的RuntimeException及其子类异常时,事务会自动回滚。如果需要自定义回滚策略,我们可以通过编程式事务管理或者使用@Transactional注解来实现。在使用@Transactional注解时,可以通过设置rollbackFor属性来指定在发生哪些异常时执行回滚操作。另外,在异常处理代码中手动触发回滚操作也是可以的。1年前 -
-
在Spring中,默认情况下,当遇到未处理的异常时,事务会回滚。Spring框架的事务管理默认使用的是Spring的声明式事务管理方式,通过AOP(面向切面编程)实现。在声明式事务管理中,可以通过对应的注解来控制事务的回滚行为。
默认情况下,Spring的@Transactional注解添加到方法上时,只有在方法抛出Runtime异常(继承自RuntimeException)时,事务才会回滚。而对于受查异常(Checked Exception)则不会触发回滚。如果需要对受查异常进行回滚,可以通过@Transactional注解的rollbackFor属性来指定需要回滚的异常类型。
除了rollbackFor属性,@Transactional还有其他与回滚相关的属性,包括noRollbackFor、rollbackForClassName、noRollbackForClassName等。可以根据具体需求来选择使用。
示例代码如下所示:
@Transactional(rollbackFor = RuntimeException.class) public void insertData() { // 业务逻辑代码 } @Transactional(rollbackFor = {CustomException.class, AnotherException.class}) public void updateData() throws CustomException, AnotherException { // 业务逻辑代码 }在上述示例中,第一个方法insertData()中,如果方法抛出了RuntimeException或其子类异常,则事务会回滚。而在第二个方法updateData()中,如果方法抛出了CustomException或AnotherException异常,则事务也会回滚。
需要注意的是,如果在方法内部捕获了异常并处理,那么事务将不会回滚。如果想要触发回滚,可以通过抛出RuntimeException或使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()方法手动设置回滚状态。
总结起来,Spring默认情况下,事务会在方法抛出RuntimeException及其子类异常时进行回滚,而对于受查异常则不会回滚。可以通过@Transactional注解的rollbackFor属性来指定需要回滚的异常类型。同时,可以通过手动抛出RuntimeException或设置回滚状态来触发事务回滚。
1年前