I need to execute a code allowing the launch of scheduled jobs on start of the application, how can I do this? Thanks.
How to execute on start code in scala Play! framework application?
Asked Answered
Use the Global
object which - if used - must be defined in the default package:
object Global extends play.api.GlobalSettings {
override def onStart(app: play.api.Application) {
...
}
}
Remember that in development mode, the app only loads on the first request, so you must trigger a request to start the process.
Since Play Framework 2.6x
The correct way to do this is to use a custom module with eager binding:
import scala.concurrent.Future
import javax.inject._
import play.api.inject.ApplicationLifecycle
// This creates an `ApplicationStart` object once at start-up and registers hook for shut-down.
@Singleton
class ApplicationStart @Inject() (lifecycle: ApplicationLifecycle) {
// Start up code here
// Shut-down hook
lifecycle.addStopHook { () =>
Future.successful(())
}
//...
}
import com.google.inject.AbstractModule
class StartModule extends AbstractModule {
override def configure() = {
bind(classOf[ApplicationStart]).asEagerSingleton()
}
}
See https://www.playframework.com/documentation/2.6.x/ScalaDependencyInjection#Eager-bindings
I have added a note at the end because this bit me, I hope you don't mind. –
Empirin
Where is the default package in Play 2? –
Melise
@poliu2s: i think its the app/ folder. –
Sherry
For anyone looking at this post, the new way to do this is to use a module and eager bidings. See playframework.com/documentation/2.6.x/… –
Hesperidin
I was getting a similar error. Like @Leo said, create Global object in app/ directory.
Only thing I had to make sure was to change "app: Application" to "app: play.api.Application".
app: Application referred to class Application in controllers package.
© 2022 - 2024 — McMap. All rights reserved.