Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Schedule a Job in Play With Akka

DZone's Guide to

Schedule a Job in Play With Akka

Follow along to see this hands-on approach to job scheduling in Scala using the Play framework.

· Java Zone
Free Resource

Just released, a free O’Reilly book on Reactive Microsystems: The Evolution of Microservices at Scale. Brought to you in partnership with Lightbend.

Greetings to all!

In this blog, we will see how we can schedule a job after some time period in play using Scala. Before we get started, I'm assuming you all have a little knowledge of Akka, Play, and Scala.

So here, we start with an actor where we will write our job to be scheduled as follows:

import javax.inject.{Inject, Singleton}
import akka.actor.Actor
import play.api.Logger
import scala.concurrent.ExecutionContext
@Singleton
class JobSchedulerActor @Inject()(implicit ec: ExecutionContext) extends Actor {
    var c= 0
    override def receive: Receive = {
        case _ =>
        c = c+1
        Logger.info("Job Scheduled "+ c )
        //Here put your code for your job
    }
}

Now, we will define the scheduler for the above job to execute at a certain duration:

class Scheduler @Inject() (val system: ActorSystem, @Named("<strong>JobSchedulerActor</strong>") val j<strong>obSchedulerActor</strong>: ActorRef)(implicit ec: ExecutionContext) {
    var actor = system.scheduler.schedule(
    0.seconds, 30.seconds,JobSchedulerActor, "schedule")
}

Now we need to bind the actor and scheduler:

import actor.SchedulerActor
import com.google.inject.AbstractModule
import play.api.Logger
import play.api.libs.concurrent.AkkaGuiceSupport
import scheduler.Scheduler

class BindModule extends AbstractModule with AkkaGuiceSupport {
    def configure() = {
        Logger.info("\nConfigurring Scheduler.")
        bindActor[<strong>JobSchedulerActor</strong>]("<strong>JobSchedulerActor</strong>")
        bind(classOf[Scheduler]).asEagerSingleton()
    }
}

Now we tell Play to start the actor after the scheduled time. We only need to write the following configuration inside application.conf :

play.modules.enabled += "modules.BindModule"

And with that, your scheduler will start scheduling your job after the specified duration once your server is up.

Strategies and techniques for building scalable and resilient microservices to refactor a monolithic application step-by-step, a free O'Reilly book. Brought to you in partnership with Lightbend.

Topics:
scheduler ,actor ,play ,java

Published at DZone with permission of Rahul Kumar, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}