如何在数据库访问中使用Future
How to use Future in database access
我在混合 Java/Scala 程序中使用 slick。
Java 代码需要从数据库中获取一些数据。
据我了解,推荐的方法是从数据库中获取 Future ,但是我该如何从这里开始呢?我是否被迫等待结果(使用阻塞Await.result)?我可以使用 onComplete 使 Java 的行为类似于 Scala 吗?
当前(阻塞)代码:
圆滑 [Scala]:
def getUser(email: String): Option[User] = {
val findUser = users
.filter(_.email === email)
.result
.headOption
Await.result(db.run(findUser), Duration(1000, "millis")) // blocking :-(
}
Java:
if(UsersDataBase.getUser(email).isDefined()) {
...
}
您需要将 Scala Future
转换(或包装)为 Java Future
。与 Option
相同
在这几天你可以使用scala-java8-compat
简单的例子是:
import scala.compat.java8.FutureConverters._
import java.util.concurrent.CompletionStage
import scala.concurrent.Future
val javaFuture:CompletionStage[String] = Future.successful("ok").toJava
我在混合 Java/Scala 程序中使用 slick。
Java 代码需要从数据库中获取一些数据。
据我了解,推荐的方法是从数据库中获取 Future ,但是我该如何从这里开始呢?我是否被迫等待结果(使用阻塞Await.result)?我可以使用 onComplete 使 Java 的行为类似于 Scala 吗?
当前(阻塞)代码:
圆滑 [Scala]:
def getUser(email: String): Option[User] = {
val findUser = users
.filter(_.email === email)
.result
.headOption
Await.result(db.run(findUser), Duration(1000, "millis")) // blocking :-(
}
Java:
if(UsersDataBase.getUser(email).isDefined()) {
...
}
您需要将 Scala Future
转换(或包装)为 Java Future
。与 Option
在这几天你可以使用scala-java8-compat
简单的例子是:
import scala.compat.java8.FutureConverters._
import java.util.concurrent.CompletionStage
import scala.concurrent.Future
val javaFuture:CompletionStage[String] = Future.successful("ok").toJava