Реконнект к БД (SQL)
Добавлено: 2016.09.27, 13:00
Всем привет.
Столкнулся как-то давненько с темой реконнекта к БД (SQL).
У меня есть воркер на yii2, который работает через commands, работает с БД он через персистентное соединение.
Через каждые 8 часов надо переподключаться к БД.
Так как запрос был всего один, я обернул в try catch запрос к БД, и если падает Exception, то надо переподключиться к БД.
Все бы ничего, только вот решение - костыльное, так как надо оборачивать запросы к БД.
Переопределить
тоже не вариант, так как это спасет от проблемы в момент подключения, а вот если надо будет переподключиться, то увы, до этого кода дело даже не дойдет, из-за вот этого:
https://github.com/yiisoft/yii2/blob/ma ... n.php#L521
Так как объект pdo у нас на тот момент уже будет.
Единственное решение которое я сейчас вижу, это переопределение
Оборачивание метода в try catch, переоткрытие соединения и запуск запроса еще раз.
Может у кого-то есть более цивилизованные способы?
Столкнулся как-то давненько с темой реконнекта к БД (SQL).
У меня есть воркер на yii2, который работает через commands, работает с БД он через персистентное соединение.
Через каждые 8 часов надо переподключаться к БД.
Так как запрос был всего один, я обернул в try catch запрос к БД, и если падает Exception, то надо переподключиться к БД.
Код: Выделить всё
Yii::$app->db->close();
Yii::$app->db->open();
Переопределить
Код: Выделить всё
yii2/vendor/yiisoft/yii2/db/Connection.php
protected function createPdoInstance()
https://github.com/yiisoft/yii2/blob/ma ... n.php#L521
Код: Выделить всё
if ($this->pdo !== null) {
return;
}
Единственное решение которое я сейчас вижу, это переопределение
Код: Выделить всё
yii2/vendor/yiisoft/yii2/db/Command.php
protected function queryInternal($method, $fetchMode = null)
Может у кого-то есть более цивилизованные способы?