我使用Runtime.getRuntime().exec("reboot")
重新启动计算机,但是有两个问题:
HandlerInterceptor's
afterCompletion方法记录日志,因此可能无法成功记录日志; 在execute reboot命令中如果立即刷新Web应用程序,则将报告未连接MySQL数据库,因为Web应用程序尚未停止,但MySQL首先会收到重新启动信号并停止。 您有什么好的建议吗?
@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>
答案 0 :(得分:0)
据我了解,如果要重新引导系统,您想将重新引导命令记录到数据库中,对吗? 如果是这种情况,则应在调用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);
}