事务传播行为:如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为
-
1. TransactionDefinition.PROPAGATION_REQUIRED: -
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。 -
2. TransactionDefinition.PROPAGATION_REQUIRES_NEW: -
创建一个新的事务,如果当前存在事务,则把当前事务挂起。 -
3. TransactionDefinition.PROPAGATION_SUPPORTS: -
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 -
4. TransactionDefinition.PROPAGATION_NOT_SUPPORTED: -
以非事务方式运行,如果当前存在事务,则把当前事务挂起。 -
5. TransactionDefinition.PROPAGATION_NEVER: -
以非事务方式运行,如果当前存在事务,则抛出异常。 -
6. TransactionDefinition.PROPAGATION_MANDATORY: -
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 -
7. TransactionDefinition.PROPAGATION_NESTED: -
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行; -
如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

上表字段说明:
-
1. value :主要用来指定不同的事务管理器; -
主要用来满足在同一个系统中,存在不同的事务管理器。 -
比如在Spring中,声明了两种事务管理器txManager1, txManager2.然后, -
用户可以根据这个参数来根据需要指定特定的txManager. -
2. value 适用场景:在一个系统中,需要访问多个数据源或者多个数据库, -
则必然会配置多个事务管理器的 -
3. REQUIRED_NEW:内部的事务独立运行,在各自的作用域中,可以独立的回滚或者提交; -
而外部的事务将不受内部事务的回滚状态影响。 -
4. ESTED 的事务,基于单一的事务来管理,提供了多个保存点。 -
这种多个保存点的机制允许内部事务的变更触发外部事务的回滚。 -
而外部事务在混滚之后,仍能继续进行事务处理,即使部分操作已经被混滚。 -
由于这个设置基于 JDBC 的保存点,所以只能工作在 JDB C的机制。 -
5. rollbackFor:让受检查异常回滚;即让本来不应该回滚的进行回滚操作。 -
6. noRollbackFor:忽略非检查异常;即让本来应该回滚的不进行回滚操作。

-
1. 事务方法的嵌套调用会产生事务传播。
-
2. spring 的事务管理是线程安全的
-
3. 父类的声明的 @Transactional 会对子类的所有方法进行事务增强;
-
子类覆盖重写父类方式可覆盖其 @Transactional 中的声明配置。
-
4. 类名上方使用 @Transactional,类中方法可通过属性配置来覆盖类上的 @Transactional 配置;
-
比如:类上配置全局是可读写,可在某个方法上改为只读。
-
1736

被折叠的 条评论
为什么被折叠?



