ZF2 + Doctrine2:服务器已消失 - 如何唤起一个古老的连接?(ZF2 + Doctri

2019-07-21 10:05发布

在此先感谢您的帮助。

我想知道如果任何人迅速知道什么函数,其对实体库调用慢跑其重新连接,如果它已经死了。 我运行一些工作,可以采取的是通过ZF2 CLI路线超过WAIT_TIMEOUT时间长度,并且不幸的是,ER的连接通过它需要习惯(当任务完成)的时间死亡。

需要:

// do the long job

$sl = $this->getServiceLocator();
$mapper = $sl->get( 'doctrine_object_mapper' );
if( !$mapper->getRepository()->isAlive() ) // something like so
    $mapper->getRepository()->wakeTheHellUp();

不是那些正确的方法名! ;)

再次感谢。

Answer 1:

这是一个相当普遍的问题与长时间运行的进程和连接。

该解决方案是检索ORM的DBAL连接并重新创建它,如果连接丢失(确保交易过程中没死)。 这显然是烦人,但它现在这样做的唯一方法:

// note - you need a ServiceManager here, not just a generic service locator
$entityMAnager = $serviceManager->get('entity_manager');
$connection    = $entityManager->getConnection();

try {
    // dummy query
    $connection->query('SELECT 1');
} catch (\Doctrine\DBAL\DBALException $e) {
    if ($connection->getTransactionIsolation()) {
        // failed in the middle of a transaction - this is serious!
        throw $e;
    }

    // force instantiation of a new entity manager
    $entityManager = $serviceManager->create('entity_manager');
}

$this->doFoo($entityManager);


文章来源: ZF2 + Doctrine2: Server has gone away - how to jog an old connection?