Class de conexão com mutiplos bancos
Olá pessoal, estou com uma dificuldade em criar uma solução em uma class de conexão. O cenário é o seguinte. O ambiente pode usar múltiplos bancos de dados em servidores separados, logo cada servidor tem seus dados específicos para conexão. Em certas partes do sistema vou usar somente um banco e em outras partes posso usar os outros bancos ou até mesmo pegar uma conexão em um banco slave de forma aleatória.
Pesquisei e ví que tem um padrão singleton mas não consegui adaptar isso para o meu caso.
A class que uso é essa
class DB {
// Static method to return a database connection to a certain pool
public static function getConnection($pool) {
// Make a copy of the server array, to modify as we go:
$dbs = array(
'write' => array(
'mysql:dbname=write_db;host=localhost',
),
'read' => array(
'mysql:dbname=read_db1;host=localhost',
'mysql:dbname=read_db2;host=localhost'
)
);
$servers = $dbs[$pool];
$connection = false;
// Keep trying to make a connection:
while (!$connection && count($servers)) {
$key = array_rand($servers);
try {
echo 'conectou<br />';
$connection = new PDO($servers[$key], Config::read('db.user'), Config::read('db.password'));
} catch (PDOException $e) {}
if (!$connection) {
// Couldn’t connect to this server, so remove it:
unset($servers[$key]);
}
}
// If we never connected to any database, throw an exception:
if (!$connection) {
throw new Exception("Failed Pool: {$pool}");
}
return $connection;
}
}
$con1 = DB::getConnection('write');
$con2 = DB::getConnection('read');
$con3 = DB::getConnection('read');
No exemplo acima eu chamo a conexão para read duas vezes mais aparece "conectou" 3 vezes ou seja passa pela new PDO sendo que a conexão read já foi feita.
Como resolver isso?
Discussão (3)
Carregando comentários...