我用Runtime.getRuntime().exec("reboot")
重新启动计算机,但有两个问题:
- 我使用
HandlerInterceptor's
afterFill 方法记录日志,这样日志可能无法成功记录; -
在执行重启命令中 如果立即刷新 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>
据我了解,如果您想重新启动系统,您想将重新启动命令记录到数据库中,我是对的吗? 如果是这种情况,那么您应该在调用 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);
}