0

将 Scala、JodaTime 和 Squeryl 用于 ORM。有一个烦人的问题是,一旦应用程序启动,使用 JodaTime 生成的时间戳不会在每次调用时重新初始化。相反,它只设置一次时间,而且每次调用 SQL 时都不会重新初始化。

代码如下。一、时间参数:

val todayEnd = new Timestamp(new DateMidnight(now,  DateTimeZone.forID("America/Los_Angeles")).plusDays(1).getMillis())

和 Squeryl 加入:

join(DB.jobs, DB.clients.leftOuter, DB.projects.leftOuter)((j,c,p) =>
        where((j.teamId === teamId)
          and (j.startTime < todayEnd)
          and (j.userId isNotNull)
          and (j.canceled === false)
          and (j.completed === false))
        select(j,c,p)
        on(j.clientId === c.map(_.id), j.projectId === p.map(_.id)))

奇怪的是,如果我在没有todayEndJodaTime 的情况下生成时间戳,那么它每次都会重新初始化。那么 JodaTime 有什么不同呢?

4

1 回答 1

0

发现了问题:显然管理 JOIN 的线程从未成功关闭,并且在 Akka 中被重新引用。这意味着该todayEnd变量从未被重新初始化。

所以带回家的教训是:管理你的线程。

更新

正如我进一步了解的那样,保存时间值的原始对象被设置为val. 事实证明,他们需要def

坏的:

val today = new Date()
lazy val today = new Date()

好的:

def today = new Date()
于 2012-08-09T19:14:21.893 回答