Grails Goodness: Add Banner to Grails Application
Grails 3 is based on Spring Boot. This means we get a lot of the functionality of Spring Boot into our Grails applications. A Spring Boot application has by default a banner that is shown when the application starts. The default Grails application overrides Spring Boot’s behavior and disables the display of a banner. To add a banner again to our Grails application we have different options.
First we can add a file banner.txt
to our classpath. If Grails finds the file it will display the contents when we start the application. Let’s add a simple banner with Grails3 in Ascii art in the file src/main/resources/banner.txt
. By placing the file in src/main/resources
we can assure it is in the classpath as classpath:/banner.txt
:
________ .__.__ ________ / _____/___________ |__| | _____\_____ \ / \ __\_ __ \__ \ | | | / ___/ _(__ < \ \_\ \ | \// __ \| | |__\___ \ / \ \______ /__| (____ /__|____/____ >______ / \/ \/ \/ \/
Let’s run our application with the bootRun
task:
gradle bootRun :compileJava UP-TO-DATE :compileGroovy UP-TO-DATE :processResources :classes :findMainClass :bootRun ________ .__.__ ________ / _____/___________ |__| | _____\_____ \ / \ __\_ __ \__ \ | | | / ___/ _(__ < \ \_\ \ | \// __ \| | |__\___ \ / \ \______ /__| (____ /__|____/____ >______ / \/ \/ \/ \/ Grails application running at http://localhost:8080 ...
To have more information in the banner we can implement the org.springframework.boot.Banner
interface. This interface has a printBanner
method in which we can write the implementation for the banner. To use it we must create an instance of the GrailsApp
class and set the banner
property:
// File: grails-app/init/banner/Application.groovy package banner import grails.boot.GrailsApp import grails.boot.config.GrailsAutoConfiguration import grails.util.Environment import org.springframework.boot.Banner import static grails.util.Metadata.current as metaInfo class Application extends GrailsAutoConfiguration { static void main(String[] args) { final GrailsApp app = new GrailsApp(Application) app.banner = new GrailsBanner() app.run(args) } } /** * Class that implements Spring Boot Banner * interface to show information on application startup. */ class GrailsBanner implements Banner { private static final String BANNER = ''' ________ .__.__ ________ / _____/___________ |__| | _____\\_____ \\ / \\ __\\_ __ \\__ \\ | | | / ___/ _(__ < \\ \\_\\ \\ | \\// __ \\| | |__\\___ \\ / \\ \\______ /__| (____ /__|____/____ >______ / \\/ \\/ \\/ \\/''' @Override void printBanner( org.springframework.core.env.Environment environment, Class<?> sourceClass, PrintStream out) { out.println BANNER row 'App version', metaInfo.getApplicationVersion(), out row 'App name', metaInfo.getApplicationName(), out row 'Grails version', metaInfo.getGrailsVersion(), out row 'Groovy version', GroovySystem.version, out row 'JVM version', System.getProperty('java.version'), out row 'Reloading active', Environment.reloadingAgentEnabled, out row 'Environment', Environment.current.name, out out.println() } private void row(final String description, final value, final PrintStream out) { out.print ':: ' out.print description.padRight(16) out.print ' :: ' out.println value } }
Now we run the bootRun
task again:
$ gradle bootRun :compileJava UP-TO-DATE :compileGroovy :processResources :classes :findMainClass :bootRun ________ .__.__ ________ / _____/___________ |__| | _____\_____ \ / \ __\_ __ \__ \ | | | / ___/ _(__ < \ \_\ \ | \// __ \| | |__\___ \ / \ \______ /__| (____ /__|____/____ >______ / \/ \/ \/ \/ :: App version :: 0.1 :: App name :: grails-banner-sample :: Grails version :: 3.0.1 :: Groovy version :: 2.4.3 :: JVM version :: 1.8.0_45 :: Reloading active :: true :: Environment :: development Grails application running at http://localhost:8080 ...
Written with Grails 3.0.1. Ascii art is generated with this website.
Reference: | Grails Goodness: Add Banner to Grails Application from our JCG partner Hubert Ikkink at the JDriven blog. |