承接 facile-it/doctrine-mysql-come-back 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

facile-it/doctrine-mysql-come-back

最新稳定版本:3.0.3

Composer 安装命令:

composer require facile-it/doctrine-mysql-come-back

包简介

Auto reconnect on Doctrine MySql has gone away exceptions on doctrine/dbal

README 文档

README

Latest Stable Version Latest Unstable Version Total Downloads

Build status Test coverage License

DoctrineMySQLComeBack

This library tries to solve the infamous "MySQL has gone away" issue, and similar ones.

It does so by providing a doctrine/dbal driver wrapper that automatically reconnects to the database server when applicable; to avoid consistency issues, the reconnection is not attempted when writes are concerned (i.e. open transaction, timeout on write queries).

Installation

If you're using DBAL 4.0+

$ composer require facile-it/doctrine-mysql-come-back ^3.0

If you're using DBAL 3.6+

$ composer require facile-it/doctrine-mysql-come-back ^2.0

If you're using DBAL ^2.3

$ composer require facile-it/doctrine-mysql-come-back ^1.0

Configuration

In order to use DoctrineMySQLComeBack you have to set the wrapperClass connection parameter. You can choose how many times Doctrine should be able to reconnect, setting x_reconnect_attempts driver option. Its value must be an int.

If you're using DBAL v2, you also need to set the driverClass parameter too; please refer to the previous version of this readme for that.

An example of configuration at connection instantiation time:

use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;

$config = new Configuration();

//..

$connectionParams = [
    'dbname' => 'mydb',
    'user' => 'user',
    'password' => 'secret',
    'host' => 'localhost',
    // [doctrine-mysql-come-back] settings
    'wrapperClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection',
    'driverOptions' => [
        'x_reconnect_attempts' => 3
    ],
];

$conn = DriverManager::getConnection($connectionParams, $config);

//..

An example of yaml configuration on Symfony projects:

doctrine:
    dbal:
        connections:
            default:
                # DATABASE_URL would be of "mysql://db_user:db_password@127.0.0.1:3306/db_name" 
                url: '%env(resolve:DATABASE_URL)%'
                wrapper_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection'
                options:
                    x_reconnect_attempts: 3

An example of configuration on Laminas Framework 2projects:

return [
    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'wrapperClass' => \Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection::class,
                'params' => [
                    'host' => 'localhost',
                    'port' => '3307',
                    'user' => '##user##',
                    'password' => '##password##',
                    'dbname' => '##database##',
                    'charset' => 'UTF8',
                    'driverOptions' => [
                        'x_reconnect_attempts' => 9,
                    ]
                ],
            ],
        ],
    ],
];

You can use wrapper class Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connections\PrimaryReadReplicaConnection if you are using a primary/replica Doctrine configuration:

use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;

$config = new Configuration();

//..

$connectionParams = [
    'wrapperClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\PrimaryReadReplicaConnection',
    'primary' => [
        // ...
        'driverOptions' => [
            'x_reconnect_attempts' => 3
        ],
    ],   
];

$conn = DriverManager::getConnection($connectionParams, $config);

//..

Usage

Since DBAL v3, Connection::refresh does not exist anymore, so you don't need to do anything else to leverage the reconnection, it will be automagically done.

From v1.6 of this library automagically reconnection is enabled also during $em->getConnection()->beginTransaction() calls, and this works also during simple $em->flush(), if out of a previous transaction.

Thanks

Thanks to Dieter Peeters and his proposal on DBAL-275. Check it out if you are using doctrine/dbal <2.3.

统计信息

  • 总下载量: 2.91M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 216
  • 点击次数: 1
  • 依赖项目数: 4
  • 推荐数: 0

GitHub 信息

  • Stars: 212
  • Watchers: 35
  • Forks: 47
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2014-08-21