这是玩的不好习惯吗!用于定义控制器内部隐式数据库会话以减少样板的框架?
object MyController extends Controller {
implicit val session = DB.createSession
}
我不确定Play!中控制器的生命周期,有人可以启发我吗?
我看到控制器内隐式数据库会话存在多个问题。
-
应在需要时创建 Db 会话,然后在执行查询后立即销毁。原因是每个会话将使用一个到数据库的连接。您的数据库可以处理
x
数量的连接。之后,数据库将停止。现在,由于每个控制器都有一个到数据库的连接,并且这些连接不会关闭,因此在使用一定数量的控制器后,应用程序的性能将大大降低。
-
由于每个控制器只有一个会话,因此将按顺序执行多个查询,即对控制器的一个请求将使用会话来执行查询,直到查询执行为止,对同一控制器的任何其他请求(即对同一控制器的任何其他方法)都必须等待。
您将 无法使用任何连接池库,因为您将创建单个会话并始终使用它。