我有一个方法:
@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/