我正在使用PlayFrameWork与Slick并在一个所有I/O数据库都很重的系统中使用它.在我的application.conf文件中我有这个设置:
play {
akka {
akka.loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-factor = 20.0
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这显然给了我每个核心20个线程的播放应用程序,据我所知它Slick创建它自己NumThreads的线程池,Slick中的字段意味着这是线程的总数还是它(NumThreads x CPU的)?是否有最佳性能的最佳实践?我目前将我的设置配置为:
database {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
databaseName = "dbname"
user = "postgres"
password = "password"
}
numThreads = 10
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试熟悉Slick 3.0和Futures(使用Scala 2.11.6).我使用基于Slick的Multi-DB Cake Pattern示例的简单代码.为什么以下代码以异常终止以及如何修复它?
import scala.concurrent.Await
import scala.concurrent.duration._
import slick.jdbc.JdbcBackend.Database
import scala.concurrent.ExecutionContext.Implicits.global
class Dispatcher(db: Database, dal: DAL) {
import dal.driver.api._
def init() = {
db.run(dal.create)
try db.run(dal.stuffTable += Stuff(23,"hi"))
finally db.close
val x = {
try db.run(dal.stuffTable.filter(_.serial === 23).result)
finally db.close
}
// This crashes:
val result = Await.result(x, 2 seconds)
}
}
Run Code Online (Sandbox Code Playgroud)
执行失败:
java.util.concurrent.RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@5c73f637 rejected from java.util.concurrent.ThreadPoolExecutor@4129c44c[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2]
at …Run Code Online (Sandbox Code Playgroud)