WARNING: This page is a guide for 1.x series. See here instead to learn about the latest

Worker Jobs


How to use SkinnyWorkerService


Skinny’s WorkerService is a simple wrapper of Java built-in ExecutorService and prepared in Skinny apps by default.

You can access it as skinnyWorkerService in ScalatraBootstrap.scala and just call scheduling methods.

import skinny._
import skinny.worker._
import skinny.controller._
import _root_.controller._

class ScalatraBootstrap extends SkinnyLifeCycle {

  override def initSkinnyApp(ctx: ServletContext) { 

    val worker = new SkinnyWorker {
      def execute = {
        println("Hello World!")
      }
    }

    // will be invoked every 300 milliseconds
    skinnyWorkerService.everyFixedMilliseconds(worker, 300)
    // will be invoked every 10 seconds
    skinnyWorkerService.everyFixedSeconds(worker, 10)
    // will be invoked every 4 minutes
    skinnyWorkerService.everyFixedMinutes(worker, 4)
    // will be invoked at 01:30, 02:30, ....
    skinnyWorkerService.hourly(worker, 30)
    // will be invoked at 09:20 AM everyday
    skinnyWorkerService.daily(worker, 9, 20)

    // Routes
    ...
    Controllers.root.mount(ctx)

  }

}

SkinnyWorker’s rule is very simple. SkinnyWorker object is a java.lang.Runnable one.

And developers just implement the abstract def execute(): Unit method.

import skinny.worker._
import model._

class SampleWorker extends SkinnyWorker {

  override def execute = {
    // If an exception is thrown from this method, 
    ImportantOperation.run()
  }

  override def handle(t: Throwable) = {
    // handles exceptions from execute method
    ErrorMailer.send(t)
  }

}
If you find a typo or mistake in this page, please report or fix it. How?