Fluent 操作以异步方式工作,并在操作完成时返回 EventLoopFuture。那么,如果代码使用数据库shutdown
调用,有没有办法确保在数据库关闭之前完成所有启动的数据库操作?
例如,下面的代码编译良好,但不能确保在数据库中插入建筑对象(Building
是一个 Fluent Model
。)。另一方面,如果我将wait
函数与函数一起使用create
,则操作会同步,但会确保在数据库中创建建筑记录。
func testExample() throws {
let dbs = Databases(threadPool: .init(numberOfThreads: System.coreCount), on: MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount))
try dbs.use(.postgres(url: "<CONNECTIONSTRING>"), as: .psql)
let db = dbs.database(.psql, logger: Logger(label: "Test"), on: dbs.eventLoopGroup.next())!
let building = Building(id: UUID("b0c8f088-df0a-4253-98e4-eb8943c054d4"), buildingName: "Building4")
building.create(on: db)
// This is synchronous and would create a record in the database.
//try building.create(on: db).wait()
dbs.shutdown()
try dbs.threadPool.syncShutdownGracefully()
try dbs.eventLoopGroup.syncShutdownGracefully()
}
有没有办法dbs.shutdown()
等到create
操作(或任何启动的数据库操作)完成?