diff --git a/cpanfile b/cpanfile index 58b880c..8b9ba95 100644 --- a/cpanfile +++ b/cpanfile @@ -5,6 +5,7 @@ requires 'Data::FormValidator' => 0; requires 'Data::Localize' => 0; requires 'Digest::MurmurHash' => 0; requires 'DBI' => 0; +requires 'DBIx::DSN::Resolver::Cached' => '0.04'; requires 'DBD::mysql' => 0; requires 'Email::MIME' => 0; requires 'Email::Send' => 0; diff --git a/etc/container.pl b/etc/container.pl index 8de5a60..c4e49e3 100644 --- a/etc/container.pl +++ b/etc/container.pl @@ -1,4 +1,5 @@ use strict; +use DBIx::DSN::Resolver::Cached; use Furl::HTTP; use String::Urandom; use Cache::Memcached::Fast; @@ -40,13 +41,24 @@ my $config = $c->get('config'); Cache::Memcached::Fast->new( $config->{'Memcached'} ); }; +register DSNResolver => DBIx::DSN::Resolver::Cached->new( + ttl => 30, + negative_ttl => 5 +); my $register_dbh = sub { my ($key) = @_; register $key => sub { my $c = shift; my $config = $c->get('config'); - my $dbh = DBI->connect( @{$config->{$key}} ); + + $resolver = $c->get('DSNResolver'); + + my @connect_info = @{$config->{$key}} + my $dsn = $resolver->resolv($connect_info[0]) + $connect_info[0] = $dsn; + + my $dbh = DBI->connect(@connect_info); $dbh->{HandleError} = sub { our @CARP_NOT = ('STF::API::WithDBI'); Carp::croak(shift) };