闲来无事,逛GitHub的一个博客项目时,发现作者在应用启动初始换临时文件夹时,使用了如下的一个操作:
```java
public static Path createTempDirectory() throws IOException {
final var tempDirectory = Files.createTempDirectory("halo");
Runtime.getRuntime().addShutdownHook(new Thread(() -> deleteFolderQuietly(tempDirectory)));
return tempDirectory;
}
```
创建完临时文件夹后,先给JVM扔了一个ShutdownHook,然后才将临时文件夹的创建结果返回。原来,这个ShutdownHook作用是在程序终止时,jvm退出前执行一些操作,比如上述的代码中的作用就是删除应用启动时初始化的临时文件夹。
于是乎,我也做了个尝试,新建一个SpringBoot Demo并启动,通过请求的方式添加Hook到JVM中,然后尝试停止应用,Bingo,成功输出想要的结果。
New一个SpringBoot Demo项目

定义一个添加Hook的方法

定义一个用于触发添加Hook的入口

启动项目后,调用几次接口,然后尝试停止该项目,就可以看到,在应用停止前,打印出了想要的内容!


Java Hook的第一次尝试