2

我公司的 DBA 有一个脚本,可以自动终止对我们生产数据库的长时间运行的数据库连接和查询。我编写了一个循环运行的 CakePHP Shell 应用程序,有点像一个守护进程,它需要定期进行数据库读取和写入。如果运行时间过长,维护脚本会关闭数据库连接,并且我的应用程序会出错。

查看 CakePHP 源代码,似乎在实例化模型时,它会自动尝试连接到适当的数据库。有没有办法只在进行查询时连接到数据库,然后断开连接?

4

2 回答 2

4

也许您可以在需要时手动连接/断开连接?

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 文档中列出了更多方法

于 2012-04-11T04:57:44.043 回答
2

也许您可以为此使用 AppModel 中的回调。

我猜您可以使用beforeFindandbeforeSafe建立与数据库的连接,然后使用afterFindandafterSafe终止您的连接。

至于使用核心 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 )

于 2012-04-11T06:58:20.380 回答