【发布时间】:2017-02-26 02:54:31
【问题描述】:
在我的项目中有一个名为process_detail 的表。 cron 进程启动后立即插入此表中的行并在最后更新
cron 进程完成。我们正在使用 grails,它在内部处理服务级别方法的事务,即事务在方法开始时开始,如果方法执行成功则提交,如果有异常则回滚。
这里发生的情况是,如果事务失败,这一行也被回滚,这是我不想要的,因为这是日志的类型
桌子。我尝试创建一个嵌套事务并保存此行并在最后更新它,但由于锁定获取异常而失败。
我正在考虑为这个特定的表使用 MyISAM, 这样我就不必担心事务,因为 MyISAM 不支持它,它会立即提交并且不可能回滚。这是我想要实现的伪代码。
def someProcess(){
//Transaction starts
saveProcessDetail(details); //Commit this immediately, should not rollback if below code fails.
someOtherWork;
updateProcessDetail(details); //Commit this immediately, should
//Transaction Ends
}
用于保存和更新过程细节的伪代码;
def saveProcessDetail(processName, processStatus){
ProcessDetail pd = new ProcessDetail(processName, processStatus);
pd.save();
}
def updateProcessDetail(processDetail, processStatus){
pd.procesStatus = processStatus;
pd.save();
}
如果在 InnoDB 中这样做更好,请提出建议。答案可能是 mysql 级别我可以自己找到 grails 解决方案。如果需要任何其他信息,请告诉我。
【问题讨论】:
-
您需要显示
saveProcessDetail()方法,以便我们提出建议。 -
@AdeelAnsari :补充说,我已将它们用作方法,它们也可能只是创建
ProcessDetail对象并保存它的两行代码。
标签: mysql grails transactions