当前位置:首页 > Java API 与类库手册 > 正文

MyBatis查Java优学网悲观锁实战:高效解决并发抢课与教师时间预约冲突

MyBatis查Java优学网悲观锁实战:高效解决并发抢课与教师时间预约冲突

SELECT * FROM products WHERE product_id = 1001 FOR UPDATE

@Transactional public PurchaseResult purchaseCourse(Long userId, Long courseId) {

MyBatis查Java优学网悲观锁实战:高效解决并发抢课与教师时间预约冲突

// 锁定课程记录
Course course = courseMapper.selectCourseForUpdate(courseId);

if (course.getRemainingSeats() > 0) {
    course.setRemainingSeats(course.getRemainingSeats() - 1);
    courseMapper.updateCourse(course);
    
    Order order = createOrder(userId, courseId);
    orderMapper.insertOrder(order);
    
    return PurchaseResult.success(order);
}

return PurchaseResult.failed("课程已售罄");

}

@Transactional(timeout = 5) // 设置5秒超时 public boolean reserveTeacherTime(Long teacherId, LocalDateTime timeSlot) {

// 锁定教师时间段记录
TimeSlot slot = timeSlotMapper.selectForUpdate(teacherId, timeSlot);

if (slot.getStatus() == TimeSlotStatus.AVAILABLE) {
    slot.setStatus(TimeSlotStatus.RESERVED);
    timeSlotMapper.update(slot);
    return true;
}

return false;

}

你可能想看:

相关文章:

文章已关闭评论!