连接管理器
连接管理器类 负责管理一个或多个 数据库连接 实例。你可以从数据库模块访问 manager
。
import Database from '@ioc:Adonis/Lucid/Database'
const manager = Database.manager
方法 / 属性#
以下是连接管理器类上可用的方法 / 属性列表。通常情况下,你不必直接与管理器交互,因为以下方法是在内部调用的。
add#
通过给连接提供 name
和其他配置,你可以让管理器注册一个新的连接,数据库模块会自动注册所有定义在 config/database.ts
内的连接。
const name = 'pg'
const config = {
client: 'pg',
connection: {
// ...
},
healthCheck: true
}
Database.manager.add(name, config)
connect#
connect
方法通过其名称实例化一个预先注册的连接。 在后台,它调用 Connection 类 上的 connect 方法。
多次调用此方法的结果是无操作。
Database.manager.connect('pg')
get#
按名称返回预注册连接的连接节点。
const {
name,
state,
connection,
config
} = Database.manager.get('pg')
以下是可用属性的列表。
name#
连接的名称,在添加时定义。
config#
引用注册的配置。
connection#
对底层 连接类 实例的引用。
state#
连接的当前状态。
-
registered
:连接已使用add
方法注册。 -
open
:连接已打开以接受新请求。 -
closing
:在关闭连接的过程中。 不能再从此连接创建或执行新查询。 -
closed
:连接已经关闭,不能再接受任何请求。你必须再次调用connect
方法。 -
migrating
:连接配置已被修改,正在迁移以使用新配置创建新连接实例。 -
has#
返回一个布尔值,告知连接是否已向管理器注册。
if (!Database.manager.has('pg')) {
Database.manager.add('pg', {})
}
isConnected#
查找连接是否处于 open
状态。
if (!Database.manager.isConnected('pg')) {
Database.manager.connect('pg')
}
patch#
patch
方法允许你更新给定连接的配置,而无需关闭现有连接或中止正在进行的查询。
修改连接后,所有新查询都将使用较新的配置。
当你有一个多租户应用程序并且你想为租户动态注册连接时,patch
方法非常有用。
Database.manager.patch('pg', {
client: 'pg',
connection: {},
})
// 采用新配置
Database.manager.connect('pg')
close#
关闭给定的连接,连接管理器仍将保留连接节点,直到你通过传递第二个参数显式释放连接。
// Close
await Database.manager.close('pg')
Database.manager.has('pg') // true
// Close + Release
await Database.manager.close('pg', true)
Database.manager.has('pg') // false
closeAll#
关闭所有注册的连接,可以传递一个布尔参数来释放连接。
await Database.manager.closeAll()
await Database.manager.closeAll(true)
release#
从受管理的连接列表中释放连接,连接将自动关闭(如果尚未关闭)。
await Database.manager.release(true)
report#
返回所有已注册连接的健康检查报告。
const report = await Database.manager.report()
console.log(report.name)
console.log(report.health.healthy)
事件#
以下是连接管理器类发出的事件列表。
db:connection:connect#
调用 connect
方法时发出。
Database.manager.on('db:connection:connect', (connection) => {
console.log(self === connection) // true
})
db:connection:error#
无法建立连接时发出。
Database.manager.on('db:connection:error', (error, connection) => {
console.log(connection)
})
db:connection:disconnect#
当连接和 Knex 实例被破坏时发出。
Database.manager.on('db:connection:disconnect', (connection) => {
console.log(connection)
})
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。