据我了解,您可以创建一些不同的数据库标识符,例如:
extension DatabaseIdentifier {
static var db1: DatabaseIdentifier<MySQLDatabase> {
return .init("db1")
}
static var db2: DatabaseIdentifier< MySQLDatabase > {
return .init("db2")
}
}
然后像这样在configure.swift注册他们
let db1 = MySQLDatabase(config: MySQLDatabaseConfig(hostname: "localhost", username: "root", database: "db1"))
let db2 = MySQLDatabase(config: MySQLDatabaseConfig(hostname: "localhost", username: "root", database: "db2"))
var databaseConfig = DatabasesConfig()
databaseConfig.add(database: db1, as: .db1)
databaseConfig.add(database: db2, as: .db2)
services.register(databaseConfig)
之后不要忘记在任何地方使用.db1 和.db2 标识符,而不是默认的.mysql(对于MySQL),例如在迁移中
migrations.add(model: User.self, database: .db1)
使用池连接
return req.requestPooledConnection(to: . db1).flatMap { conn in
defer { try? req.releasePooledConnection(conn, to: . db1) }
return User.query(on: conn).all()
}
在交易中
return req.transaction(on: .db1) { conn in
return User.query(on: conn).all()
}
抱歉,如果我没有回答您的问题。我知道如果Fluent 可以支持为每个查询传递数据库名称,那就太好了,但我还没有在其中找到。 (或者如何在查询中传递数据库名称并不明显)
但顺便说一句,从我的角度来看,为每个客户端设置单独的数据库可能会让您对迁移感到非常头疼……也许将它们全部存储在一个数据库中但使用分区会更好?例如对于像described here这样的PostgreSQL