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

Implicit DB Session in Controller

在 Play! 中这是不好的做法吗?用于在控制器内定义隐式数据库会话以减少样板文件的框架?

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

我不太清楚 Play! 中控制器的生命周期,有人能指教我吗?

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

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

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

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

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