我使用symfony1.4作为我的web应用程序,它使用doctory1.2连接到我的mysql数据库。我有一个symfony任务,它首先使用条令查询获取一些数据,然后执行一个非常耗时的不涉及数据库的操作(例如:永无止境的for循环),不需要数据库连接。因为后面的操作不需要打开数据库连接,所以我需要在数据库操作完成后关闭数据库连接。所以我尝试了以下代码来关闭数据库连接。
sfContext::createInstance($configuration);
sfContext::getInstance()->getDatabaseConnection('doctrine')->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );
// Do the doctrine queries and fetch data
sfContext::getInstance()->getDatabaseManager()->shutdown();
gc_collect_cycles();
// Do the non-database operation
在执行非数据库操作时,我使用 SHOW PROCESSLIST
在mysql上运行的命令。它仍然显示symfony应用程序创建的mysql连接没有关闭,而是处于休眠状态。
有没有办法永久关闭symfony中的数据库连接。
注意:我发现如果在执行条令查询之前关闭了连接,条令连接就会关闭。
这很可能是因为条令使用pdo,pdo需要在关闭mysql连接之前取消所有引用,否则它会保持连接活动。但我不知道如何清除条令中的pdo引用。
1条答案
按热度按时间ggazkfy81#
那是你正在处理的一些非常古老的东西。我不知道你为什么要从sfcontext singleton得到东西。您应该可以这样做:
这会关闭连接,但会让它在连接管理器中注册。这基本上是从doctrine1手册中出来的。
这将允许您遍历连接并关闭它们,同时还可以从管理器中删除它们: