2012-12-06 16 views
6

Tôi có một Play! ứng dụng với một số tác vụ tôi cần chạy theo định kỳ. Tôi có thể lên lịch các nhiệm vụ bằng cách sử dụng Akka, nhưng tôi không chắc chắn làm thế nào để bắt đầu lịch trình. Những gì tôi đang làm ngay bây giờ là có một đối tượng Scheduler và bắt đầu nó từ Global.scala, nhưBắt đầu diễn viên Akka trong Play

// app/jobs/Scheduler.scala 
package jobs 

import akka.util.duration._ 
import play.api.libs.concurrent.Akka 
import play.api.Play.current 

object Scheduler { 
    def start() { 
    Akka.system.scheduler.schedule(0 seconds, 1 minutes) { 
     SomeTask.start() 
    } 
    } 
} 

và sau đó

// app/Global.scala 
import play.api._ 
import jobs.Scheduler 

object Global extends GlobalSettings { 
    override def onStart(app: Application) { 
    Scheduler.start() 
    } 
} 

vấn đề này ở đây là trong này, nhiệm vụ chạy ngay cả trong chế độ phát triển và trong các thử nghiệm, điều đó sẽ sớm trở nên rất khó chịu.

Có cách nào để lên lịch công việc với Akka chỉ ở chế độ sản xuất không?

+1

Có nhiều phương pháp 'isProd', 'isDev' và' isTest' trên [Play] (http: //www.playframework. đối tượng org/documentation/api/2.1-RC1/scala/index.html # play.api.Play $) để tìm ra chế độ bạn hiện đang chạy. – 4e6

+0

Cảm ơn bạn. Trong khi các phương thức bạn đề cập phụ thuộc vào việc có 'ứng dụng' tiềm ẩn trong phạm vi - không phải như vậy, vì đối số cho 'onStart' không được ngầm định - theo liên kết của bạn, tôi thực sự thấy rằng có thể chỉ cần kiểm tra app.mode, làm như vậy. Nếu bạn muốn đưa câu trả lời đó vào một câu trả lời, tôi sẽ rất vui khi chấp nhận nó. – Andrea

Trả lời

7

Phương pháp isProd, isDevisTest trên Play đối tượng có thể là hữu ích. Thậm chí nếu bạn không có tiềm ẩn Application trong phạm vi, bạn có thể vượt qua nó một cách rõ ràng

override def onStart(app: Application) { 
    if (isProd(app)) Scheduler.start() 
}