mongodb - Grails Job | mongodb中的多个更新总是抛出乐观的锁定异常,该如何处理呢?

标签 mongodb grails optimistic-locking

我有一个grails作业,该作业计划在每天晚上运行,以更新所有用户的统计信息,分别是firstOrderDate,lastOrderDate和totalOrders。

看一下代码。

 void updateOrderStatsForAllUsers(DateTime date) {
    List<Order> usersByOrders = Delivery.findAllByDeliveryDateAndStatus(date, "DELIVERED")*.order
    List<User> customers = usersByOrders*.customer.unique()

    for (User u in customers) {
        List<Order> orders = new ArrayList<Order>();
        orders = u.orders?.findAll { it.status.equals("DELIVERED") }?.sort { it?.dateCreated }
        if (orders?.size() > 0) {
            u.firstOrderDate = orders?.first()?.dateCreated
            u.lastOrderDate = orders?.last()?.dateCreated
            u.totalOrders = orders.size()
            u.save(flush: true)
        }
    }
} 

运行此代码的工作是
def execute(){
    long jobStartTime = System.currentTimeMillis()

    emailService.sendJobStatusEmail(JOB_NAME, "STARTED", 0, null)

    try {
        // Daily job for updating user orders
        DateTime yesterday = new DateTime().withZone(DateTimeZone.getDefault()).withTimeAtStartOfDay().minusDays(1)
        userService.updateOrderStatsForAllUsers(yesterday)
        emailService.sendJobStatusEmail(JOB_NAME, "FINISHED", jobStartTime, null)
    }
    catch (Exception e) {
        emailService.sendJobStatusEmail(JOB_NAME, "FAILED", jobStartTime, e)
    }
}

因此,我正在发送一封邮件,对于发生的任何异常,现在的问题是我总是在u.save()处收到“错误:OptimisticLockingException”失败邮件。对于一个日期,我有大约400个用户。

我知道为什么会发生乐观锁定,但是如您所见,我不是在循环更新同一用户记录,而是有一个不同用户的列表,并且正在迭代他们以更新所有用户。然后,如何在用户保存时得到乐观的锁定异常。救命 !

最佳答案

乐观锁定是一个休眠错误,Mango DB与之无关。

哪个实体抛出了乐观锁定异常,是客户,订单还是交货?

运行此作业时,如何确保这些实体中的任何一个都没有更新?

您如何确保一次仅触发一次该作业?

尝试添加一些日志记录以查看它是可重复的问题,方法是在上一次执行完成后再次触发作业。

更多调试可能有助于解决此问题。

关于mongodb - Grails Job | mongodb中的多个更新总是抛出乐观的锁定异常,该如何处理呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383731/

相关文章:

javascript - 使用 React.js 插入 MongoDB 文档

javascript - ERROR 错误。GrailsExceptionResolver - 处理请求 : [GET] 时发生 NullPointerException

Grails 动态脚手架与 hasMany : is it a bug or am I misconfiguring?

java - 检查和更新表中的记录时潜在的并发问题

jpa - 如何处理 org.eclipse.persistence.exceptions.OptimisticLockExceptionio

python - 如何将django 与mongoengine 一起使用?

php - MongoDB PHP 驱动程序未在 fpm 中加载 - 但在 cli 中加载

node.js - Mongoose 中的数组匹配查询不起作用

java - 考虑从 Java/Spring MVC 迁移到 Grails

spring - HibernateOptimisticLockingFailureException 将连接标记为 'closed' ?