我有一个缓存,我想定期检查和修剪.在Java中,我会做以下事情:
new Thread(new Runnable() {
void run() {
while (true) {
Thread.sleep(1000);
// clear the cache's old entries
}
}
}).start();
Run Code Online (Sandbox Code Playgroud)
当然,我有一些线程安全类型的问题可以用作缓存,但是把它放在一边,我的问题很简单.什么是Scala运行重复后台任务的方式 - 您不希望在应用程序的主线程中运行?
我曾经使用过一些演员,我猜我在这个场景中的问题是我没有任何东西可以生成一条消息,是时候清除缓存了.或者更确切地说,我可以想象生成这些消息的唯一方法是创建一个线程来执行它...
编辑:我需要人们对答案进行投票 - 他们对我来说都很好看
我需要在应用程序启动时安排一个重复的任务,任务本身非常简单,只需向应用程序发送一个即发即弃的HTTP调用.我不是一个游戏高手,买我会假设是s简单的解决方案会是这样的使用play.api.libs.concurrent.Akka.system.schedule在Global.onStart.从Play 2.4开始,Global配置有点弃用,有利于新的Guice DI.黑客从DI文档中获取建议我无法为这个问题找到一个很好的解决方案.我设法得到的最好的是在GuiceApplicationLoader调用自定义实现之上编写一个包装器BuiltInComponentsFromContext,但在这种情况下我不能使用注入来获取WSClient.使用Play 2.4重写类似内容的最佳方法是什么:
object Global extends GlobalSettings {
override def onStart(app: Application) = {
Akka.system.schedule(2.hours, 2.hours, theTask)
}
}
Run Code Online (Sandbox Code Playgroud)