启动Yii2 / PHP应用程序时,如何检查/等到数据库启动?
我目前使用MySQL:
$time = time();
$ok = false;
do {
try {
$pdo = new PDO($dsn,$username,$password);
if ($pdo->query("SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA"))
$ok=true;
} catch (\Exception $e) {
sleep(1);
}
} while (!$ok && time()<$time+30);
现在,我要使我的应用程序与MySQL和PostgreSQL一起运行。
但是SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA
在PostgreSQL中不起作用。
是否在两个数据库系统上都可以使用SQL语句(使用PDO数据库连接)来检查数据库是否已启动并正在运行?
答案 0 :(得分:2)
Yii2具有一个属性来验证连接是否存在,实际上没有必要为此创建脚本,因为该框架已经为其支持的数据库实现了一种抽象($isActive property)。
$ isActive公共只读属性DB连接是否为 已建立
布尔布尔值getIsActive()
您可以通过以下方式在default controller
中进行检查:
<?php
class DefaultController extends Controller
{
public function init()
{
if (!Yii::$app->db->isActive) {
// The connection does not exist.
}
parent::init();
}
}
除非有非常特殊的要求,否则强制等待与数据库的连接不是一个好习惯。与数据库的连接的可用性必须是应用程序启动的强制性要求,并且该应用程序不应“等待”数据库可用。
有多种方法可以按顺序或有特定要求在docker中运行容器,此link可以为您提供更好的选择,而不是将其委托给应用程序。
答案 1 :(得分:1)