Ratpack有ratpack.server.Service
与方法接口onStart
和onStop
。如果我们为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.txt
在src/ratpack
目录:
____ __ __
/ __ \____ _/ /_____ ____ ______/ /__
/ /_/ / __ `/ __/ __ \/ __ `/ ___/ //_/
/ _, _/ /_/ / /_/ /_/ / /_/ / /__/ ,<
/_/ |_|\__,_/\__/ .___/\__,_/\___/_/|_|
/_/
当我们运行应用程序时,我们会看到日志消息和横幅: