首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将删除从数据库中删除,从FileSystem事务中删除?

将删除从数据库中删除,从FileSystem事务中删除?
EN

Stack Overflow用户
提问于 2015-07-03 17:22:15
回答 2查看 484关注 0票数 0

我有以下方法,从文件系统中删除图像,并从数据库中删除相应的记录。

代码语言:javascript
运行
复制
  boolean delete(ImageItem imageItem) {
    boolean success = false
    String imageId = imageItem.id

    ...

    Path outFile = Paths.get(fileUrl)
    if (Files.deleteIfExists(outFile)) {
      log.debug "delete() - file deleted: ${fileUrl}"
      success = true
    }

    try{
      imageItem.delete(flush: true)
    } catch (Exception e) {
      log.debug "delete() - Record deleted failed: ${e}"
      success = false
    }

    return success
  }

我想使这两个delete操作都是事务性的,这意味着这两个操作都在继续或不进行。

有办法这样做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-03 17:43:43

你当然能做到!

代码语言:javascript
运行
复制
ImageItem.withTransaction {status ->
   try {
      imageItem.delete(flush: true)
   } catch (Exception e) {
      status.setRollbackOnly()   
      return 
   }

   Path outFile = Paths.get(fileUrl)
   try{
      if (Files.deleteIfExists(outFile)) {
        log.debug "delete() - file deleted: ${fileUrl}"
      } catch (e) {
         status.setRollbackOnly()
      }
}

首先尝试删除数据库记录(如果失败则回滚),然后删除实际文件。

https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/withTransaction.html

票数 3
EN

Stack Overflow用户

发布于 2015-07-03 20:30:55

这可以通过使用@Transactional注释标记此方法来完成。若要回滚事务,应抛出运行时异常。因此,通过在方法的末尾组织代码和创建文件删除逻辑,您可以确保在发生错误时,这两个操作都会被回滚。

代码语言:javascript
运行
复制
@Transactional
 boolean delete(ImageItem imageItem) {
    boolean success = false
    String imageId = imageItem.id

    ...

   try{
      imageItem.delete(flush: true)
    } catch (Exception e) {

    }
    Path outFile = Paths.get(fileUrl)
    //@TODO:Throw Runtime exception in case of file deletion failure
    if (Files.deleteIfExists(outFile)) {
      log.debug "delete() - file deleted: ${fileUrl}"
      success = true
    }

    return success
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31211745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档