gpt4 book ai didi

java - 事务回滚后从文件系统中删除文件

转载 作者:行者123 更新时间:2023-12-02 10:42:43 25 4
gpt4 key购买 nike

在事务方法中的 Spring 应用程序中,数据将被持久化,并且文件将被写入文件系统(带有路径和文件名)。现在,如果数据库事务由于某种原因失败,该文件应再次从文件系统中删除。

为此,我考虑使用事件监听器,如下所示。

@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)
public void handleRollback() {
// remove file with the use of the path and file name
// (but where do those two parameters come from?)
}

但是,在该事件监听器中,我需要路径的属性 valuefileName 来知道要删除哪个文件。但我认为导致回滚的事件将由 Spring 触发,并且我无法随之传递值。

那么我该如何处理回滚呢?

最佳答案

您可以尝试以下架构:

@Service
class DbService {
@Transactional
public void doInDb() {}
}

@Service
class DomainService {
@Autowired DbService dbService;
@Autowired FsService fsService;
...
public void doDbAndFs() {
try {
fsService.saveFiles();
dbService.doInDb();
} catch (Exception e) {
fsService.cleanUp();
}

}
}

因此,您可以在没有事务上下文的情况下进行 FS 更改。如果事务上下文中发生一些异常,您可以捕获它并让 FS 进行清理。

关于java - 事务回滚后从文件系统中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52812598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com