bushbaby / doctrine-reconnect
Zend Framework 2 module which attempts to reconnect when the database has 'gone away'
Installs: 4 037
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 4
Forks: 1
Open Issues: 1
Requires
Requires (Dev)
This package is auto-updated.
Last update: 2024-11-24 04:32:06 UTC
README
Small Zend Framework 2 module which attempts to reconnect when the database has 'gone away'.
In order to do this it overrides Doctrine DBAL Driver provided by the DoctrineORMModule.
I did not invent this method. I just liked it and thought it deserved a zf2 module so it can be reused easily. Credits ought to go to circlical.
Installation
php composer.phar require bushbaby/doctrine-reconnect
Then add BsbDoctrineReconnect
to your config/application.config.php
.
Adjust your Doctrine DB Config
Copy the config/bsb-doctrine-reconnect.local.php.dist to your config/autoload/config/bsb-doctrine-reconnect.local.php directory and override the specified driverClass for each connection you have have defined.
<?php return array( 'doctrine' => array( 'connection' => array( 'orm_default' => array( 'driverClass' => 'BsbDoctrineReconnect\DBAL\Driver\PDOMySql\Driver', 'wrapperClass' => 'BsbDoctrineReconnect\DBAL\Connection', 'params' => array( 'driverOptions' => array( 'x_reconnect_attempts' => 10, ), ) ) ) ), );
Test
You can manually test this actually works by connecting to mysql from the cli and killing the appropriate connection;
mysql> SHOW PROCESSLIST; +----+------+-----------+----------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+----------+---------+------+-------+------------------+ | 1 | root | localhost | database | Sleep | 1 | | NULL | | 4 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +----+------+-----------+----------+---------+------+-------+------------------+ 4 rows in set (0.00 sec) mysql> KILL 1; Query OK, 0 rows affected (0.00 sec)
Known limitations
This method only works for non transactional statements.