2017-02-24 17 views
0

Slick 3でセッションを明示的に処理する方法はありますか?私は現在、それは罰金、私はそれを実行し、最初の数回動作しますが、その後、私は接続/セッションが(下記参照)開いたままにされているように見えるの問題に実行を開始Slick 3のセッション設定/タイムアウト

def findUserByEmail(email: String): Option[User] = { 

    val users = TableQuery[Users] 
    val action = users.filter(_.email === email).result.headOption 

    val result = db.run(action.transactionally) 

    Await.result(result, Duration.Inf) 
} 

のように見えるいくつかのコードを持っています。このコードはawsのラムダ関数の中で実行されているので、セッションをより明示的に処理する必要があると考えています。私はSlick 3でこれをどうやってしますか?

"errorMessage": "Timeout after 5000ms of waiting for a connection.", 
    "errorType": "java.sql.SQLTimeoutException", 
    "stackTrace": [ 
     "com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:233)", 
     "com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:183)", 
     "com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)", 
     "slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:18)", 
     "slick.jdbc.JdbcBackend$BaseSession.<init>(JdbcBackend.scala:424)", 
     "slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:47)", 
     "slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:38)", 
     "slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:218)", 
     "slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:217)", 
     "slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:38)", 
     "slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:239)", 
     "java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)", 
     "java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)", 
     "java.lang.Thread.run(Thread.java:745)" 
    ], 
    "cause": { 
     "errorMessage": "FATAL: remaining connection slots are reserved for non-replication superuser connections", 
     "errorType": "org.postgresql.util.PSQLException", 
     "stackTrace": [ 
     "org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455)", 
     "org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2586)", 
     "org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:113)", 
     "org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:222)", 
     "org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:52)", 
     "org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:216)", 
     "org.postgresql.Driver.makeConnection(Driver.java:404)", 
     "org.postgresql.Driver.connect(Driver.java:272)", 

答えて

0

クエリタイムアウトを設定できます。

slick { 
     // https://github.com/slick/slick/blob/master/slick-hikaricp/src/main/scala/slick/jdbc/hikaricp/HikariCPJdbcDataSource.scala 
     dataSourceClass = "slick.jdbc.DriverDataSource" 
     user = ${database.user} 
     password = ${database.password} 
     url = ${database.url} 
     connectionPool = HikariCP 
     maxConnections = 50 
     numThreads = 10 
     queueSize = 5000 
     connectionInitSql = "SELECT 1;" 
     connectionTestQuery = "SELECT 1;" 
     registerMbeans = true 

     properties = { 
     driver = ${database.driver} 
     url = ${database.url} 
     } 
} 
:あなたはまた、次のようにひかり接続プールに異なるプロパティを設定することができ

db.run(action.transactionally.withStatementParameters(statementInit = st => st.setQueryTimeout(100))) 

:このように

関連する問題