我公司的 DBA 有一个脚本,可以自动终止对我们生产数据库的长时间运行的数据库连接和查询。我编写了一个循环运行的 CakePHP Shell 应用程序,有点像一个守护进程,它需要定期进行数据库读取和写入。如果运行时间过长,维护脚本会关闭数据库连接,并且我的应用程序会出错。
查看 CakePHP 源代码,似乎在实例化模型时,它会自动尝试连接到适当的数据库。有没有办法只在进行查询时连接到数据库,然后断开连接?
我公司的 DBA 有一个脚本,可以自动终止对我们生产数据库的长时间运行的数据库连接和查询。我编写了一个循环运行的 CakePHP Shell 应用程序,有点像一个守护进程,它需要定期进行数据库读取和写入。如果运行时间过长,维护脚本会关闭数据库连接,并且我的应用程序会出错。
查看 CakePHP 源代码,似乎在实例化模型时,它会自动尝试连接到适当的数据库。有没有办法只在进行查询时连接到数据库,然后断开连接?
也许您可以在需要时手动连接/断开连接?
DboSource 有很多方法供您使用。以下是可能有用的函数列表:
$db = ConnectionManager::getDataSource('local');
$isconnected = $db->isConnected(); //is the connection open?
$db->close(); //close the connection
$db->reconnect(); //reconnect to the db
DboSource API 文档中列出了更多方法
也许您可以为此使用 AppModel 中的回调。
我猜您可以使用beforeFind
andbeforeSafe
建立与数据库的连接,然后使用afterFind
andafterSafe
终止您的连接。
至于使用核心 Cake 功能打开和关闭数据库连接的“正确”方式,我不确定,但 Costa 的回答似乎是一个好的(而且干净!)计划。
(1) http://book.cakephp.org/1.3/en/view/922/Database-Configuration(链接停止工作,猜你现在应该看这里:http: //book.cakephp.org/1.3/en/ The-Manual/Developing-with-CakePHP/Configuration.html )