系列文章目录
概要
程序运行后,需要做资源清理,删除目录、关闭数据库连接等, 本文学习kafka,顶级大师的代码,看看怎样把本领学到手。
一、Kafka源码学习
Kafka.scala类入口:
def main(args: Array[String]): Unit = {
try {
val serverProps = getPropsFromArgs(args)
val kafkaServerStartable = KafkaServerStartable.fromProps(serverProps)
Runtime.getRuntime().addShutdownHook(new Thread() {
override def run() = {
kafkaServerStartable.shutdown
}
})
kafkaServerStartable.startup
kafkaServerStartable.awaitShutdown
}
观察上面代码:程序启动前,就注册个钩子,钩子在程序结束时运行。
二、在项目中实践
代码如下(示例):
main方法:
addShutDownHook();
/***
* 清理资源
*/
private static void addShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
try {
LOGGER.info("shutDownHook 准备清理");
HdfsUtils.close();
LOGGER.info("shutDownHook 清理完成");
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
总结
在main方法中增加 Runtime.getRuntime().addShutdownHook(new Thread()) 来实现资源的清理
|