scala play:如何在自动重建时杀死旧角色/线程?
我有一个play应用程序,其中我使用的演员可以做一些持续的工作/监控 e、 g 在我的代码中,我只启动了这个演员一次。scala play:如何在自动重建时杀死旧角色/线程?,scala,playframework,actor,Scala,Playframework,Actor,我有一个play应用程序,其中我使用的演员可以做一些持续的工作/监控 e、 g 在我的代码中,我只启动了这个演员一次。 我的问题是,每当play自动重建应用程序时(由于源代码更改),它都会创建一个新的参与者,但不会删除旧的参与者。 如果使用线程(包括守护进程线程)而不是参与者进行监视,则会发生完全相同的情况 除了手动重新启动应用程序(我可以在每次更改时自动重新启动应用程序)之外,是否有其他方法可以在自动重建时杀死旧的参与者/线程,或者确保只存在一个参与者(我尝试将参与者线程设为对象,但这没有任何
我的问题是,每当play自动重建应用程序时(由于源代码更改),它都会创建一个新的参与者,但不会删除旧的参与者。 如果使用线程(包括守护进程线程)而不是参与者进行监视,则会发生完全相同的情况 除了手动重新启动应用程序(我可以在每次更改时自动重新启动应用程序)之外,是否有其他方法可以在自动重建时杀死旧的参与者/线程,或者确保只存在一个参与者(我尝试将参与者线程设为
对象,但这没有任何帮助)?
另外,是否有一种更好的后台监控模式(显然是一种不会创建非结束线程的模式)
谢谢您可以定义侦听应用程序事件(必须在默认包中定义):
重新加载时会触发停止和启动事件。
如果您使用的是Play的内部演员系统,我认为您可以使用此系统:
play.api.libs.concurrent.Akka.system.shutdown()
这不是他的把戏,谢谢你!编辑:应在默认包中
import play.api.GlobalSettings
object Global extends GlobalSettings {
override def onStart(application: play.api.Application) {
println("Starting actors")
MyActorSystem
}
override def onStop(application: play.api.Application) {
println("Stopping actors")
MyActorSystem.system.shutdown()
}
}
play.api.libs.concurrent.Akka.system.shutdown()