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._45
:: Reloading active :: true
:: Environment :: development
Grails application running at http://localhost:8080
...
Written with Grails 3.0.1.
Original article
Ascii art is generated with this website.