vanam / kdyby-doctrine-mysql-come-back
当 Doctrine MySql 抛出 "连接已断开" 异常时,在 doctrine/dbal 中自动重连,支持 Kdyby/Doctrine 兼容性。这是 https://github.com/facile-it/doctrine-mysql-come-back 的分支。
dev-master
2015-09-23 17:12 UTC
Requires
- doctrine/dbal: >=2.3,<2.6-dev
- kdyby/doctrine: ^2.3
This package is not auto-updated.
Last update: 2024-09-28 18:22:27 UTC
README
在 doctrine/dbal >=2.3 <2.6-dev 中,使用 Kdyby/Connection 扩展自动重连 Doctrine MySql 的 "连接已断开" 异常。
安装
$ composer require vanam/kdyby-doctrine-mysql-come-back dev-master
配置
为了使用 KdybyDoctrineMySQLComeBack,您必须设置连接参数 wrapperClass 和 driverClass。您可以选择 Doctrine 能够重连的次数,通过设置驱动器选项 x_reconnect_attempts。它的值应该是一个整数。
连接实例化时配置示例
use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; $config = new Configuration(); //.. $connectionParams = array( 'dbname' => 'mydb', 'user' => 'user', 'password' => 'secret', 'host' => 'localhost', // [doctrine-mysql-come-back] settings 'wrapperClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection', 'driverClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver', 'driverOptions' => array( 'x_reconnect_attempts' => 3 ) ); $conn = DriverManager::getConnection($connectionParams, $config); //..
Nette 项目中 neon 配置示例
# config.neon doctrine: driverClass: Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver wrapperClass: Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection host: %database.host% user: %database.user% password: %database.password% dbname: %database.dbname% driverOptions: x_reconnect_attempts: 3 metadata: App: %appDir% # namespace with models in Nette app
Symfony 2 项目中 yaml 配置示例
# Doctrine example Configuration doctrine: dbal: default_connection: %connection_name% connections: %connection_name%: host: %database_host% port: %database_port% dbname: %database_name% user: %database_user% password: %database_password% charset: UTF8 wrapper_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection' driver_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver' options: x_reconnect_attempts: 3
用法
在执行任何其他不同于 SELECT 的操作之前,尝试强制重连
$em->getConnection()->refresh();
。
相反,如果您的下一个查询将是 SELECT,则自动完成重连。
感谢
感谢 Dieter Peeters 及其在 DBAL-275 上的建议。如果您正在使用 doctrine/dbal <2.3,请查看。