文档

§Play Slick 高级主题

§连接池

随着 Slick 3 的发布,Slick 开始并控制连接池和线程池,以优化数据库操作的异步执行。

在 Play Slick 中,我们决定让 Slick 控制连接池的创建和管理(Slick 3 使用的默认连接池是 HikariCP),这意味着要调整连接池,您需要查看 Slick ScalaDoc 中的 Database.forConfig(确保在文档中展开 forConfig 行)。事实上,请注意,您为设置 Play 连接池传递的任何值(例如,在键 play.db.default.hikaricp 下)都不会被 Slick 拾取,因此实际上会被忽略。

此外,请注意,如 Slick 文档 中所述,连接池大小的合理默认值是根据线程池大小计算的。实际上,在大多数情况下,您只需要调整每个数据库配置的 numThreadsqueueSize

最后,值得一提的是,虽然 Slick 允许使用与 HikariCP 不同的连接池(尽管 Slick 目前只提供对 HikariCP 的内置支持,并且要求您提供 JdbcDataSourceFactory 的实现,如果您想使用不同的连接池),Play Slick 目前不允许使用与 HikariCP 不同的连接池。

注意:更改 play.db.pool 的值不会影响 Slick 使用的连接池。此外,请注意,Play Slick 不考虑 play.db 下的任何配置。

§线程池

从 Slick 3.0 版本开始,Slick 开始控制线程池和连接池,以优化数据库操作的异步执行。

为了获得最佳执行效果,您可能需要调整每个数据库配置的 numThreadsqueueSize 参数。有关详细信息,请参阅 Slick 文档

从 Slick 的 3.2.2 版本开始,要求 maxConnections = maxThreads,否则您可能会在日志中看到以下消息

> [warn] s.u.AsyncExecutor - 如果使用事务或数据库锁,则 maxConnection > maxThreads 会导致死锁。

要解决此问题,只需在您的配置中设置它们。例如,

slick.dbs.default.profile="slick.profile.PostgresProfile$"
slick.dbs.default.db.dataSourceClass="slick.jdbc.DatabaseUrlDataSource"
slick.dbs.default.db.numThreads=20
slick.dbs.default.db.maxConnections=20

下一步: Play Slick 常见问题解答


发现此文档中的错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?请访问 我们的社区论坛 与社区进行交流。