2015-10-08 2 views
3

Я использую плей-пятно с гладкой 3.0.0 следующим образом:SQLTimeoutException в плей-скользкий

я получил соединение по

val conn = db.createSession.conn 

затем получил заявление:

val statement = conn.prepareStatement(querySQL) 

и возврат ResultSet:

Но у меня проблема: Я пытался использовать этот запрос о раз, тогда я получил исключение:

SQLTimeoutException: Тайм-аут после 1000 мс ожидания соединения.

Я знаю, что это может быть вызвано не закрытыми соединениями и Я не закрыл соединение или сеанс в своем коде вручную.

Я хочу знать:

  • Будет ли соединение создать на моем пути и вернуться в пул соединений автоматически?
  • Была ли моя ситуация вызванной подключением не выпущена?
  • Как закрыть соединение вручную?

Любая помощь была бы принята с благодарностью!

ответ

1

Примечание: Это было бы наиболее полезно, если вы разместите полный код (включая ваш вызов, который выполняется в 50 раз)

Будет ли соединение создать на моем пути и вернуться в пул соединений автоматически?

No. Даже если Java 7 (и выше) предусматривает так называемые примерочных с-ресурсами (см https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) для автоматического закрытия вашего ресурса. , AFAIK, этот механизм недоступен в Scala (пожалуйста, поправьте меня, если это не так). Тем не менее, Scala предоставляет шаблон LOAN (см. https://wiki.scala-lang.org/display/SYGN/Loan, особенно using), который в конечном итоге обеспечивает способ закрытия ресурсов FP.

Была ли моя ситуация вызванной подключением не выпущена?

Пока вы не предоставляете полный код, это только предположение. Да, а не закрытие соединений делает пул соединений выше, таким образом, что новые соединения не доступны в конечном итоге.

Как закрыть соединение вручную?

connection.close()