Статьи

Grails Goodness: добавьте баннер в приложение Grails

Grails 3 основан на Spring Boot. Это означает, что мы получаем большую часть функциональности Spring Boot в наших приложениях Grails. Приложение Spring Boot по умолчанию имеет баннер, который отображается при запуске приложения. Приложение Grails по умолчанию переопределяет поведение Spring Boot и отключает отображение баннера. Чтобы снова добавить баннер в наше приложение Grails, у нас есть разные варианты.

Сначала мы можем добавить файл banner.txt в наш classpath. Если Grails найдет файл, он покажет содержимое, когда мы запустим приложение. Давайте добавим простой баннер с Grails3 в Ascii art в файл src/main/resources/banner.txt . Поместив файл в src/main/resources мы можем убедиться, что он находится в classpath как classpath:/banner.txt :

1
2
3
4
5
6
  ________             .__.__         ________
 /  _____/___________  |__|  |   _____\_____  \
/   \  __\_  __ \__  \ |  |  |  /  ___/ _(__  <
\    \_\  \  | \// __ \|  |  |__\___ \ /       \
 \______  /__|  (____  /__|____/____  >______  /
        \/           \/             \/       \/

Давайте запустим наше приложение с задачей bootRun :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
gradle bootRun
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources
:classes
:findMainClass
:bootRun
 
  ________             .__.__         ________
 /  _____/___________  |__|  |   _____\_____  \
/   \  __\_  __ \__  \ |  |  |  /  ___/ _(__  <
\    \_\  \  | \// __ \|  |  |__\___ \ /       \
 \______  /__|  (____  /__|____/____  >______  /
        \/           \/             \/       \/
 
Grails application running at http://localhost:8080
...

Чтобы получить больше информации в баннере, мы можем реализовать интерфейс org.springframework.boot.Banner . Этот интерфейс имеет метод printBanner в котором мы можем написать реализацию для баннера. Чтобы использовать его, мы должны создать экземпляр класса GrailsApp и установить свойство banner :

01
02
03
04
05
06
07
08
09
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
59
// 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
    }
 
}

Теперь мы снова bootRun задачу bootRun :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ 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
...

Написано с Grails 3.0.1. Искусство Ascii генерируется с помощью этого сайта .

Ссылка: Grails Goodness: добавьте баннер в приложение Grails от нашего партнера JCG Хьюберта Иккинка в блоге JDriven .