简体   繁体   中英

Slick Database Instantiation And Connection Pool Logic

I am instantiating a slick database with code similar to

import slick.jdbc.JdbcBackend.Database

val db : Database =  Database forConfig "configPath"

The query is constructed from a function that takes in a user id and returns a user name from the database table:

def queryName(userId : String) =
  for {
    row <- TableQuery[Tables.MyTable] if row.userid === userId
  } yield row.username

And then running the query to produce distinct Publisher values:

val p1 : Publisher[String] = db stream (queryName("foo").result)

val p2 : Publisher[String] = db stream (queryName("bar").result)

Finally, my question is: Do multiple calls to db.stream utilize the same connection in the connection pool?

In other words, once I've instantiated the database is that the same as locking in on a single connection?

The implication would be that true utilization of all connections in the pool would require a function to create Database values before querying:

//Is this necessary?

val db = () => Database forConfig "configPath"

val p1 = db() stream (queryName("foo").result)

Thank you in advance for your consideration and response

According to Slick documentation about database thread pool :

When using Database.forConfig , the thread pool is configured directly in the external configuration file together with the connection parameters.

My hypothesis here is that you are using a connection pool (which is always recommended in production environments) and you have configured it properly in the external configuration file (the one referred by configPath ).

You don't have to worry about database connections since your Database object (your db ) is managing that for you.

Each call to db.stream() actually uses (and withdraw) a connection from the pool (eventually opening a new one according to the pool size and configuration) and releases it afterwards back into the pool.

For further details on how a connection pool works and how to configure (eg size) it in slick can be found at connection-pools .

An addictional note from adding-slick-to-your-project :

If you want to use Slick's connection pool support, you need to add HikariCP as a dependency.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM