Ratpack has the ratpack.server.Service
interface with the methods onStart
and onStop
. If we write an implementation class for the Service
interface and register it with the Ratpack registry, then Ratpack will invoke the onStart
method when the application starts and the onStop
method when the application stops. The methods take an event object as argument and we can use the event object to access the registry if we need to. Writing an implementation for the Service
interface can be useful for example to bootstrap the application with initial data or do other things.
In the following example implementation we log when the application starts and stops. In the onStart
method we also display a Ratpack banner on the console.
// File: src/main/groovy/com/mrhaki/ratpack/Banner.groovy package com.mrhaki.ratpack import com.google.common.io.Resources import groovy.util.logging.Slf4j import ratpack.server.Service import ratpack.server.StartEvent import ratpack.server.StopEvent import ratpack.util.RatpackVersion @Slf4j class Banner implements Service { @Override void onStart(StartEvent event) throws Exception { log.info('Starting Ratpack application') showBanner() } private void showBanner() { // Load banner.txt from the classpath. final URL bannerResource = Resources.getResource('banner.txt') final String banner = bannerResource.text // Print banner with version info about Ratpack and JVM. println banner println ":: Ratpack version : ${RatpackVersion.version}" println ":: Java version : ${System.getProperty('java.version')}" } @Override void onStop(StopEvent event) throws Exception { log.info('Stopping Ratpack application') } }
In our Ratpack application we use the Banner
class and add it to the registry:
// File: src/ratpack/ratpack.groovy import com.mrhaki.ratpack.Banner import static ratpack.groovy.Groovy.ratpack ratpack { bindings { // Register Service implementation in the // registry. Ratpack picks it up and executes // the onStart and onStop methods. bind Banner } handlers { get { render 'Ratpack rocks!' } } }
We also create a file banner.txt
in the src/ratpack
directory:
____ __ __ / __ \____ _/ /_____ ____ ______/ /__ / /_/ / __ `/ __/ __ \/ __ `/ ___/ //_/ / _, _/ /_/ / /_/ /_/ / /_/ / /__/ ,< /_/ |_|\__,_/\__/ .___/\__,_/\___/_/|_| /_/
When we run the application we see the logging messages and our banner:
$ gradle run :compileJava UP-TO-DATE :compileGroovy UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :configureRun :run [main] INFO ratpack.server.RatpackServer - Starting server... [main] INFO ratpack.server.RatpackServer - Building registry... [main] INFO ratpack.server.RatpackServer - Initializing 1 services... [ratpack-compute-1-1] INFO com.mrhaki.ratpack.Banner - Starting Ratpack application ____ __ __ / __ \____ _/ /_____ ____ ______/ /__ / /_/ / __ `/ __/ __ \/ __ `/ ___/ //_/ / _, _/ /_/ / /_/ /_/ / /_/ / /__/ ,< /_/ |_|\__,_/\__/ .___/\__,_/\___/_/|_| /_/ :: Ratpack version : 1.1.1 :: Java version : 1.8.0_66 [main] INFO ratpack.server.RatpackServer - Ratpack started (development) for http://localhost:5050 > Building 83% > :run
Written with Ratpack 1.1.1.