控制器中的隐式数据库会话



这是玩的不好习惯吗!用于定义控制器内部隐式数据库会话以减少样板的框架?

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

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

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

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

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

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

  3. 您将
  4. 无法使用任何连接池库,因为您将创建单个会话并始终使用它。

最新更新