Gerenciador de conexões
A classe do gerenciador de conexões é responsável por gerenciar uma ou mais instâncias de conexão de banco de dados. Você pode acessar o manager
a partir do módulo Database.
import Database from '@ioc:Adonis/Lucid/Database'
const manager = Database.manager
Métodos/propriedades
A seguir está a lista de métodos/propriedades disponíveis na classe do gerenciador de conexões. Normalmente, você não precisa interagir com o gerenciador diretamente, pois os métodos a seguir são invocados internamente.
add
Registre uma nova conexão com o gerenciador fornecendo o nome
da conexão e sua configuração. O módulo de banco de dados registra automaticamente todas as conexões definidas dentro do arquivo config/database.ts
.
const name = 'pg'
const config = {
client: 'pg',
connection: {
// ...
},
healthCheck: true
}
Database.manager.add(name, config)
connect
O método connect
instancia uma conexão pré-registrada pelo seu nome. Por baixo dos panos, ele chama o método connect na classe Connection.
Chamar esse método várias vezes resulta em uma operação inativa.
Database.manager.connect('pg')
get
Retorna o nó de conexão para uma conexão pré-registrada pelo seu nome.
const {
name,
state,
connection,
config
} = Database.manager.get('pg')
A seguir está a lista de propriedades disponíveis.
name
O nome da conexão, conforme definido no momento da adição.
config
Referência à configuração registrada
connection
Referência à instância subjacente connection class.
state
O estado atual da conexão.
registered
: A conexão foi registrada usando o métodoadd
.open
: A conexão está aberta para aceitar novas solicitações.closing
: No processo de fechamento da conexão. Nenhuma nova consulta pode ser criada ou executada a partir desta conexão.closed
: A conexão foi fechada e não pode aceitar mais nenhuma solicitação. Você deve chamar o métodoconnect
novamente.migrating
: A configuração de conexão foi corrigida e está migrando para criar uma nova instância de conexão com a nova configuração.
has
Retorna um booleano informando se a conexão foi registrada com o gerenciador ou não.
if (!Database.manager.has('pg')) {
Database.manager.add('pg', {})
}
isConnected
Descubra se uma conexão está no estado aberto
ou não.
if (!Database.manager.isConnected('pg')) {
Database.manager.connect('pg')
}
patch
O método patch
permite que você atualize a configuração para uma determinada conexão sem fechar a conexão existente ou abortar as consultas em andamento.
Após a conexão ter sido corrigida, todas as novas consultas usarão a configuração mais recente.
O método patch
é realmente útil quando você tem um aplicativo multilocatário e deseja registrar conexões em tempo real para os locatários.
Database.manager.patch('pg', {
client: 'pg',
connection: {},
})
// Usa nova configuração
Database.manager.connect('pg')
close
Fechar uma determinada conexão. O gerenciador de conexões ainda manterá o nó de conexão até que você libere a conexão explicitamente passando o segundo argumento.
// Fechar
await Database.manager.close('pg')
Database.manager.has('pg') // true
// Fechar + Liberar
await Database.manager.close('pg', true)
Database.manager.has('pg') // false
closeAll
Fecha todas as conexões registradas. Um parâmetro booleano pode ser passado para também liberar a conexão.
await Database.manager.closeAll()
await Database.manager.closeAll(true)
release
Libera uma conexão da lista gerenciada de conexões. A conexão será fechada automaticamente (se ainda não estiver fechada).
await Database.manager.release(true)
report
Retorna o relatório de verificação de integridade para todas as conexões registradas.
const report = await Database.manager.report()
console.log(report.name)
console.log(report.health.healthy)
Eventos
A seguir está a lista de eventos emitidos pela classe do gerenciador de conexões.
db
\ :connection
\ :connect
Emitido quando o método connect
é chamado
Database.manager.on('db:connection:connect', (connection) => {
console.log(self === connection) // true
})
db
\ :connection
\ :error
Emitido quando não é possível estabelecer a conexão
Database.manager.on('db:connection:error', (error, connection) => {
console.log(connection)
})
db
\ :connection
\ :disconnect
Emitido quando a conexão e as instâncias do Knex foram destruídas.
Database.manager.on('db:connection:disconnect', (connection) => {
console.log(connection)
})