Skip to content

Commit 162a17c

Browse files
committed
[docs update]完善修正Spring 事务对于@transactional注解的介绍
1 parent a549825 commit 162a17c

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -598,13 +598,9 @@ public class GlobalExceptionHandler {
598598
public enum Isolation {
599599

600600
DEFAULT(TransactionDefinition.ISOLATION_DEFAULT),
601-
602601
READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),
603-
604602
READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),
605-
606603
REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),
607-
608604
SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);
609605

610606
private final int value;
@@ -632,9 +628,29 @@ public enum Isolation {
632628

633629
`Exception` 分为运行时异常 `RuntimeException` 和非运行时异常。事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。
634630

635-
当 `@Transactional` 注解作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。如果类或者方法加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
631+
当 `@Transactional` 注解作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
636632

637-
在 `@Transactional` 注解中如果不配置`rollbackFor`属性,那么事务只会在遇到`RuntimeException`的时候才会回滚,加上 `rollbackFor=Exception.class`,可以让事务在遇到非运行时异常时也回滚。
633+
`@Transactional` 注解默认回滚策略是只有在遇到`RuntimeException`(运行时异常) 或者 `Error` 时才会回滚事务,而不会回滚 `Checked Exception`(受检查异常)。这是因为 Spring 认为`RuntimeException`和 Error 是不可预期的错误,而受检异常是可预期的错误,可以通过业务逻辑来处理。
634+
635+
![](https://oss.javaguide.cn/github/javaguide/system-design/framework/spring/spring-transactional-rollbackfor.png)
636+
637+
如果想要修改默认的回滚策略,可以使用 `@Transactional` 注解的 `rollbackFor` 和 `noRollbackFor` 属性来指定哪些异常需要回滚,哪些异常不需要回滚。例如,如果想要让所有的异常都回滚事务,可以使用如下的注解:
638+
639+
```java
640+
@Transactional(rollbackFor = Exception.class)
641+
public void someMethod() {
642+
// some business logic
643+
}
644+
```
645+
646+
如果想要让某些特定的异常不回滚事务,可以使用如下的注解:
647+
648+
```java
649+
@Transactional(noRollbackFor = CustomException.class)
650+
public void someMethod() {
651+
// some business logic
652+
}
653+
```
638654

639655
## Spring Data JPA
640656

0 commit comments

Comments
 (0)