java - @Transactional 需要回滚所有内容,除了一个保存在数据库中

标签 java exception rollback java-annotations

我有一个方法:

@Transactional
@Override
public void createFile(final String number) {
    try {
           //code to save values
           throw new Exception(number);
        } catch(Exception e){
             this.repository.save(e.getMessage());
     }
}
在方法创建文件 有许多数据库保存操作需要在发生错误时回滚。 Catch 需要将错误信息保存在表中。
如果出现异常,我如何回滚整个事务但仍然保存/更新 this.repository.save(e.getMessage());在数据库上?谁能帮我解决这个问题?提前致谢。

最佳答案

我假设您正在使用 Spring。
将其拆分为两种方法。例如,createFile使用调用对方的 try-catch,例如 createFileWorker//code to save values .调用 createFileWorker来自 createFile .如果两个方法都在同一个类中,例如 MyService ,您必须使用 @Lazy注入(inject)代理MyService进入 MyService你必须调用createFileWorker通过这个代理的惰性实例。 createFileWorker应该用 @Transactional(propagation=Propagation.REQUIRES_NEW) 注释.

@Service
class MyService {

private MyService self;

public MyService(@Lazy MyService self) {
  this.self = self;
}

@Transactional
void createFile() {
  try {
    self.createFileWorker()
  } catch (Exception ex) {
    this.repository.save(e.getMessage());
  }
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
void createFileWorker() {
  //code to save values
}

}

关于java - @Transactional 需要回滚所有内容,除了一个保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66368024/

相关文章:

java - 防止应用程序在两个实例上运行

java - libGDX 平铺 map 隐藏视口(viewport)外的 Sprite

c++ - 异常是如何转移到寻找处理程序的?

java - 无状态 session EJB 3.0 中的事务回滚

java - Spring Junit 数据库在测试类结束时回滚

java - 由于 Lambok 带注释的类,Maven 构建失败

java - Spring @Value 将空字符串拆分为列表

python - 在 Python Paramiko 中捕获 AuthenticationException

java - 每次java.lang.exception.getCause()都为null

sql - 如何在SQL Server 2005中回滚UPDATE查询?