流畅的数据库实例化和连接池逻辑
Slick Database Instantiation And Connection Pool Logic
我正在使用类似于
的代码实例化一个灵活的数据库
import slick.jdbc.JdbcBackend.Database
val db : Database = Database forConfig "configPath"
查询是由一个函数构造的,该函数接受用户 ID 和 returns 来自数据库的用户名 table:
def queryName(userId : String) =
for {
row <- TableQuery[Tables.MyTable] if row.userid === userId
} yield row.username
然后 运行 生成不同 Publisher
值的查询:
val p1 : Publisher[String] = db stream (queryName("foo").result)
val p2 : Publisher[String] = db stream (queryName("bar").result)
最后,我的问题是:多次调用 db.stream
是否使用连接池中的同一个连接?
换句话说,一旦我实例化了数据库就等于锁定在单个连接上吗?
这意味着真正利用池中的所有连接需要一个函数在查询之前创建 Database
个值:
//Is this necessary?
val db = () => Database forConfig "configPath"
val p1 = db() stream (queryName("foo").result)
提前感谢您的考虑和回复
根据有关 database thread pool 的 Slick 文档:
When using Database.forConfig
, the thread pool is configured directly in the external configuration file together with the connection parameters.
我的假设是您正在使用连接池(在生产环境中始终推荐使用)并且您已在外部配置文件(configPath
引用的那个)中正确配置它。
您不必担心数据库连接问题,因为您的 Database
对象(您的 db
)正在为您管理。
对 db.stream()
的每次调用实际上使用(并撤回)池中的一个连接(最终根据池大小和配置打开一个新连接),然后将其释放回池中。
有关连接池如何工作以及如何在 slick 中配置(例如大小)的更多详细信息,请访问 connection-pools。
来自 adding-slick-to-your-project 的令人上瘾的笔记:
If you want to use Slick’s connection pool support, you need to add HikariCP as a dependency.
我正在使用类似于
的代码实例化一个灵活的数据库import slick.jdbc.JdbcBackend.Database
val db : Database = Database forConfig "configPath"
查询是由一个函数构造的,该函数接受用户 ID 和 returns 来自数据库的用户名 table:
def queryName(userId : String) =
for {
row <- TableQuery[Tables.MyTable] if row.userid === userId
} yield row.username
然后 运行 生成不同 Publisher
值的查询:
val p1 : Publisher[String] = db stream (queryName("foo").result)
val p2 : Publisher[String] = db stream (queryName("bar").result)
最后,我的问题是:多次调用 db.stream
是否使用连接池中的同一个连接?
换句话说,一旦我实例化了数据库就等于锁定在单个连接上吗?
这意味着真正利用池中的所有连接需要一个函数在查询之前创建 Database
个值:
//Is this necessary?
val db = () => Database forConfig "configPath"
val p1 = db() stream (queryName("foo").result)
提前感谢您的考虑和回复
根据有关 database thread pool 的 Slick 文档:
When using
Database.forConfig
, the thread pool is configured directly in the external configuration file together with the connection parameters.
我的假设是您正在使用连接池(在生产环境中始终推荐使用)并且您已在外部配置文件(configPath
引用的那个)中正确配置它。
您不必担心数据库连接问题,因为您的 Database
对象(您的 db
)正在为您管理。
对 db.stream()
的每次调用实际上使用(并撤回)池中的一个连接(最终根据池大小和配置打开一个新连接),然后将其释放回池中。
有关连接池如何工作以及如何在 slick 中配置(例如大小)的更多详细信息,请访问 connection-pools。
来自 adding-slick-to-your-project 的令人上瘾的笔记:
If you want to use Slick’s connection pool support, you need to add HikariCP as a dependency.