Scala 为什么JodaTime时间戳没有在Squiryl中重新初始化?

Scala 为什么JodaTime时间戳没有在Squiryl中重新初始化?,scala,jodatime,squeryl,Scala,Jodatime,Squeryl,对ORM使用Scala、JodaTime和Squiryl。有一个恼人的问题,应用程序一旦启动,使用JodaTime生成的时间戳不会在每次调用时重新初始化。相反,它只设置了一次时间,令人烦恼的是,它不会在每次调用SQL时重新初始化 代码如下。首先,时间参数: val todayEnd = new Timestamp(new DateMidnight(now, DateTimeZone.forID("America/Los_Angeles")).plusDays(1).getMillis())

对ORM使用Scala、JodaTime和Squiryl。有一个恼人的问题,应用程序一旦启动,使用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)))
join(DB.jobs,DB.clients.leftOuter,DB.projects.leftOuter)((j,c,p)=>
其中((j.teamId==teamId)
和(j.startTime

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

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

因此,带回家的教训是:管理您的线程

更新 正如我进一步了解到的,保存时间值的原始对象被设置为
val
。事实证明,它们必须是
def

坏的:

好:

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