如何在启动时查询数据库?

时间:2019-01-20 22:32:04

标签: swift vapor

我正在尝试在数据库中每分钟安排一次随机元素的查询。

计划部分有效,但是我找不到从数据库中选择项目的方法...

我是个敏捷的初学者。也许我错过了一些重要的事情!

如果您需要更多信息,请告诉我

这是我来自boot.swift的代码

import Fluent
import FluentSQLite

func foo(on container: Container) {
    let future = container.withPooledConnection(to: .sqlite) { db in
        return Future.map(on: container){ }
    }
    future.do{ msg in

        let allQuotes = QuoteOfTheDay.query(on: ).all().wait()
        quoteOfTheDay = allQuotes.randomElement()

        }.catch{ error in
            print("\(error.localizedDescription)")
    }
}

/// Called after your application has initialized.
public func boot(_ app: Application) throws {
    // your code here

    func runRepeatTimer() {

        app.eventLoop.scheduleTask(in: TimeAmount.minutes(1), runRepeatTimer)
        foo(on: app)
    }

    runRepeatTimer()

}


2 个答案:

答案 0 :(得分:1)

Application符合Container,因此您可以在boot(_:)中调用它,并仅提供应用程序

答案 1 :(得分:0)

根据您的代码,您可以在启动时通过以下方式从数据库中查询项目:

          let req = Request(using: app)
          let allQuotes = QuoteOfTheDay.query(on: req).all().wait()
          quoteOfTheDay = allQuotes.randomElement()

此外,对于每24小时可以执行的重复任务,您可以使用

          app.eventLoop.scheduleRepeatedTask(initialDelay: TimeAmount.seconds(0), delay: TimeAmount.hours(24), foo(on: app))