class ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper

yaml file (default 60 seconds).
Configure the frequency by setting reaping_frequency in your database
the connection pool.
pool. A reaper instantiated with a zero frequency will never reap
Every frequency seconds, the reaper will call reap and flush on

def initialize(pool, frequency)

def initialize(pool, frequency)
  @pool      = pool
  @frequency = frequency
end

def register_pool(pool, frequency) # :nodoc:

:nodoc:
def register_pool(pool, frequency) # :nodoc:
  @mutex.synchronize do
    unless @threads[frequency]&.alive?
      @threads[frequency] = spawn_thread(frequency)
    end
    @pools[frequency] ||= []
    @pools[frequency] << WeakRef.new(pool)
  end
end

def run

def run
  return unless frequency && frequency > 0
  self.class.register_pool(pool, frequency)
end

def spawn_thread(frequency)

def spawn_thread(frequency)
  Thread.new(frequency) do |t|
    # Advise multi-threaded app servers to ignore this thread for
    # the purposes of fork safety warnings
    Thread.current.thread_variable_set(:fork_safe, true)
    running = true
    while running
      sleep t
      @mutex.synchronize do
        @pools[frequency].select! do |pool|
          pool.weakref_alive? && !pool.discarded?
        end
        @pools[frequency].each do |p|
          p.reap
          p.flush
        rescue WeakRef::RefError
        end
        if @pools[frequency].empty?
          @pools.delete(frequency)
          @threads.delete(frequency)
          running = false
        end
      end
    end
  end
end