我是一个特定的用例。我的Raspberry上有一个Spring启动应用程序。这个应用程序在Raspberry启动时自动执行。我想发送一个远程命令来重启或关闭Raspberry,但我需要先关闭我的Spring Boot应用程序。
这个应用程序使用H2Database和SmsLib来关闭(10/20秒)。
我的想法是拦截远程请求,然后尝试以编程方式关闭应用程序:
applicationContext.close();
然后在我的自定义ApplicationListener中,我读取了我应该执行的命令(重启或暂停),我这样做:
Runtime.getRuntime().exec("reboot");
这是我的contextClosedEvent的相关部分:
@Component
public class ContextClosedHandler implements ApplicationListener<ContextClosedEvent> {
private String commandToExecute;
public void onApplicationEvent(ContextClosedEvent event) {
try {
if (commandToExecute != null) {
Runtime.getRuntime().exec(commandToExecute);
}
} catch (Throwable e) {
log.error("Errore durante l'esecuzione del comando <" + commandToExecute + ">", e);
}
}
但是我觉得这不是100%的正确方法。我应该确保只在我的应用程序中的所有东西都终止时重启或关闭我的Raspberry(与db,listeners,handler,ecc的连接)。你有更好的主意吗?
谢谢!