Scala事务和数据一致性

时间:2017-02-24 15:16:57

标签: scala transactions h2 slick

我想知道我该怎样做才能确保我的代码在线程安全的同时“租用”#34;一本书。

  def rentBook(intNum: Int): Future[Unit] = Future[Unit] {
    val book = Await.result(bookRep.getById(intNum), 5 seconds).get
    if(book.available) {
      val updatedBook = Book(intNum, book.title, book.authID, available = false)
      bookRep.updateById(intNum, updatedBook)
    }
  }

基本上我在这里找到我要租的书,检查它是否可用,然后更新它以使其无法使用。但是在这里我们有明显的错误,这将允许两个用户在一定条件下租用同一本书(他们搜索书籍,同时获得书籍,并且他们两本书都可用)。这是服务类。如何使用Slick Scala使此事务成为原子?我正在连接H2数据库。

我尝试使用synchronized块,但我想知道是否有更好的方法?

0 个答案:

没有答案