java - Spring @Transactional - 我可以覆盖 rollbackFor

标签 java spring transactions rollback

我正在调用具有以下注释的服务:

@Transactional(rollbackFor=ExceptionA.class)
public void myMethodA(....) throws ExceptionA {
.
.
}

我正在从另一个 Spring Bean 中的其他方法调用此方法。

@Transactional(rollbackFor=ExceptionB.class)
public void mainEntryPointMethod(....) throws ExceptionB {
.
  try {
    myMethodA()
  }
  catch (ExceptionA exp) {
   .
  }


.
}

我的问题是,如果 myMethodA 抛出异常,我的事务(默认传播从 mainEntryPointMethod -> myMethodA 传递)将被标记为回滚。有没有一种方法可以覆盖内部方法的“rollbackFor”?

提前致谢 克里斯

最佳答案

解决方案#1 您可以指定您正在调用的方法获得它自己的事务。 您可以通过注释该方法来做到这一点。

 @Transactional(propagation = Propagation.REQUIRES_NEW)

这样,如果方法 (myMethodA) 被标记为回滚,则只会回滚该事务,而不是调用者事务。

只有当您被允许让被调用方法管理它自己的事务并且不想回滚调用者事务时才有效。

解决方案#2 也许您可以尝试子类化并更改事务注释属性。

关于java - Spring @Transactional - 我可以覆盖 rollbackFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717142/

相关文章:

java - 如何向 GXT 网格添加行

java - 如何将类路径添加到 Gradle JavaExec 任务以执行可运行的 jar?

mysql - 选择未提交的数据

java - 在 JPA/Hibernate 中正确使用 flush()

transactions - Apache Camel : Multiple Transactions within a Route

java - 我的线程中出现 NoClassDefFoundError 异常

java - 如果 tomcat 作为 Windows 服务托管,tomcat8.exe 会消耗大量 CPU/内存

java - 使用数组适配器和 listView 时出现异常

java - Maven安装命令报错

java - 如何合并这两个 Spring Boot Controller ?