2017-04-06 20 views
0

私は、同様のコードで滑らかなデータベースをインスタンス化していますが、クエリは、ユーザIDを取り込み、データベーステーブルからユーザー名を返す関数から構成されています。スリックデータベースインスタンス化と接続プール・ロジック

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

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

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

そして、その後、個別のPublisher値を生成するクエリを実行しています

最後に、私の質問は:db.streamへの複数の呼び出しは、接続プールで同じ接続を利用していますか?

つまり、データベースをインスタンス化したら、単一の接続でロックするのと同じことですか?

含意は、プール内のすべての接続の真の利用が照会する前にDatabase値を作成する機能が必要になるということでしょう:

//Is this necessary? 

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

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

はによるご検討および応答

答えて

1

のために事前にありがとうdatabase thread pool約滑らかなドキュメント:

Database.forConfig使用して、スレッドプールが構成されているディ接続パラメータとともに外部設定ファイルに直接書き込むことができます。ここ

私の仮説は、あなたが(常に本番環境で推奨される)接続プールを使用していて、外部の設定ファイル(configPathで呼ば1)で適切に設定されていることです。

Databaseオブジェクト(db)が管理しているので、データベース接続を心配する必要はありません。

db.stream()を呼び出すたびに、実際にプールから接続が使用され(プールのサイズと構成に応じて新しいプールが開かれます)、その後プールに戻されます。

接続プールの仕組みと構成方法(サイズなど)の詳細については、connection-poolsを参照してください。

adding-slick-to-your-projectからaddictional注:

あなたはスリックの接続プールのサポートを使用する場合は、依存関係としてHikariCPを追加する必要があります。