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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | // 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.