我正在编写一个代码,该代码将从元数据仓库中获取数据库表的列表,并按照元数据存储库中的配置在源数据库和目标数据库之间移动数据。以下是我的要求: -
下面是代码的示例实现。方法futureCalc
将具有移动数据的实现。以下是我的问题: -
1.为了发送电子邮件报告,我是否需要使用Async.result
作为阻止会话来获取报告列表,或者是否有非阻塞方式来实现此目的?
2.我已经在多个论坛中读过应该使用Callback而不是阻塞API,是否在与主线程分开的线程中异步调用回调?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure
import scala.async.Async._
object test extends App {
def futureCalc(i:Int):Int = {
val sleeptime = i*60
println("This is start of thread:"+i)
Thread.sleep(sleeptime)
println("This is after sleep :"+i)
if (i<4)
i*i
else
throw new RuntimeException("Bad thing")
}
val iniList = List(1,2,3,4)
val resultList = iniList map (i => Future{futureCalc(i)})
resultList map (i => {while(!i.isCompleted){
i.onComplete {
case Success(j) => println("No Issues")
case Failure(ex) => println("Something went wrong ")
}
}
}
)
}
如果您说Scala和数据库,请使用Lightbend的SLICK。结果是期货,可以像这样执行:
val q2 = for {
c <- coffees if c.price < 9.0
s <- suppliers if s.id === c.supID
} yield (c.name, s.name)`
请参阅Slick文档。