我使用
Runtime.getRuntime().exec("reboot")
重新启动电脑,但有两个问题:
HandlerInterceptor's
afterCompletion方法来记录日志,这样日志可能无法记录成功; 在执行reboot命令时如果立即刷新Web应用程序,会报MySQL数据库未连接,因为Web应用程序还没有停止,但MySQL先收到reboot信号并停止。 你有什么好的建议吗?
@RequestMapping(value = "system_set", method = RequestMethod.POST)
@AccessLog(value = "操作计算机", additional = {"{0=关闭计算机,1=重启计算机,2=关闭网卡}"})
@ResponseBody
public JsonObj sysOper(@RequestParam Integer num) {
// 1:重启计算机/0:关闭计算机/2:关闭网卡
if (num == 1) {
NetWorkService.rebootSystem();
} else if (num == 0) {
NetWorkService.shutdownSystem();
} else if (num == 2) {
NetWorkService.rebootNetwork();
} else {
return new JsonObj(false);
}
return new JsonObj(true);
}
public static void rebootSystem() {
String execCommand = "reboot";
try {
Runtime.getRuntime().exec(execCommand);
} catch (IOException e) {
logger.error("failed reboot system", e);
}
}
<mvc:interceptor>
<mvc:mapping path="/**"></mvc:mapping>
<mvc:exclude-mapping path="/static/**" ></mvc:exclude-mapping>
<bean class="cn.com.web.interceptors.AccessLogger" />
</mvc:interceptor>
据我了解,您希望将重新启动命令记录到数据库中,以防您想重新启动系统,我是对的吗? 如果是这种情况,那么您应该在调用 NetWorkService.rebootSystem(); 之前编写自定义代码来记录到数据库。 类似的事情会做:
if (num == 1) {
LogService.LogRebootEvent();
NetWorkService.rebootSystem();
} else if (num == 0) {
NetWorkService.shutdownSystem();
} else if (num == 2) {
NetWorkService.rebootNetwork();
} else {
return new JsonObj(false);
}
if (num == 1) {
LogService.LogRebootEvent();
NetWorkService.rebootSystem();
} else if (num == 0) {
NetWorkService.shutdownSystem();
} else if (num == 2) {
NetWorkService.rebootNetwork();
} else {
return new JsonObj(false);
}