Controller中的隐式数据库会话

时间:2015-01-19 10:55:07

标签: scala playframework slick play-slick

玩游戏是不好的做法!用于在控制器内部定义隐式数据库会话以获得较少样板的框架?

object MyController extends Controller  {
  implicit val session = DB.createSession
}

我不确定Play中控制器的生命周期!有人可以启发我吗?

1 个答案:

答案 0 :(得分:2)

我看到控制器内部存在隐式数据库会话的多个问题。

  1. 应在需要时创建Db会话,然后在执行查询后立即销毁。原因是每个会话将使用一个到db的连接。您的数据库可以处理x个连接数。之后,db将停止运行。

    现在,由于每个控制器都有一个与数据库的连接,并且这些连接不会被关闭,因此在一定数量的控制器之后,应用程序的性能将大大降低。

  2. 由于每个控制器只有一个会话,因此将按顺序执行多个查询,即一个请求控制器将使用该会话执行查询,直到执行查询,对同一个控制器的任何其他请求(即到同一个控制器的任何其他方法)将不得不等待。

  3. 您将无法使用任何连接池库,因为您将创建单个会话并在整个过程中使用它。