0

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

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

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

4

1 回答 1

2

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

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

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

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

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

于 2015-01-19T15:03:48.127 回答