打包:在启动和停止应用程序生命周期事件时执行代码


Ratpack有ratpack.server.Service与方法接口onStartonStop。如果我们为Service接口并将其注册到Ratpack注册表,则Ratpack将调用onStart在应用程序启动时调用onStop在应用程序停止时调用。这些方法以事件对象作为参数,如果需要,我们可以使用事件对象来访问注册表。编写Service例如,接口可用于引导具有初始数据的应用程序或执行其他操作。

在下面的示例实现中,我们记录应用程序启动和停止的时间。在onStart方法时,我们还会在控制台上显示Ratpack横幅。

// 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')
    }
}

在我们的Ratpack应用程序中,我们使用Banner类并将其添加到注册表中:

// 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!'
        }
    }
}

我们还创建了一个文件banner.txtsrc/ratpack目录:

    ____        __                   __  
   / __ \____ _/ /_____  ____ ______/ /__
  / /_/ / __ `/ __/ __ \/ __ `/ ___/ //_/
 / _, _/ /_/ / /_/ /_/ / /_/ / /__/ ,<   
/_/ |_|\__,_/\__/ .___/\__,_/\___/_/|_|  
               /_/                       

当我们运行应用程序时,我们会看到日志消息和横幅: