远程调用cmd更新本地jar
2019-08-16 11:05:13来源:博客园 阅读 ()
远程调用cmd更新本地jar
最近遇到一个项目需求需要实现远程更新,但是本地项目无法更新自己,这让博主很是头疼,既然自己无法更新自己的话,那就自建新的项目,通过本地项目来调用新项目接口来更新本地项目。
代码如下:
1 /** 2 * 重启完成更新 3 */ 4 public void restart() { 5 log.info("restart"); 6 String command = "cmd /c start C:\\rct\\winsw\\rct\\update.bat"; 7 //测试 8 String distName = "dist"; 9 String jarName = "rct-demo-1.0.jar"; 10 String bat; 11 if (type.equals("dist")) { 12 log.info("dist"); 13 bat = "@echo off\n" + 14 "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" + 15 "cd /d \"%~dp0\"\n" + 16 "net stop \"" + webService + "\"" + "\n" + 17 "xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" + 18 "net start \"" + webService + "\""; 19 } else if (type.equals("jar")) { 20 log.info("jar"); 21 bat = "@echo off\n" + 22 "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" + 23 "cd /d \"%~dp0\"\n" + 24 "net stop \"" + jarService + "\"" + "\n" + 25 "xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" + 26 "net start \"" + jarService + "\""; 27 } else { 28 log.info("all"); 29 bat = "@echo off\n" + 30 "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" + 31 "cd /d \"%~dp0\"\n" + 32 "net stop \"" + jarService + "\"" + "\n" + 33 "net stop \"" + webService + "\"" + "\n" + 34 "xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" + 35 "xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" + 36 "net start \"" + jarService + "\"" + "\n" + 37 "net start \"" + webService + "\""; 38 } 39 creatBat(bat);//创建bat脚本 40 log.info("cmd exec"); 41 try { 42 HttpUtil.HttpClientPost(cmdUrl, command); 43 } catch (Exception e) { 44 log.error("http请求异常"); 45 e.printStackTrace(); 46 } 47 log.info("cmd success"); 48 }
中间if-else那一坨,主要是用来存储bat脚本,为了方便,通过creatBat方法(自己实现)将bat脚本写入本地,然后通过post请求去传递参数(自己实现),新项目接口收到命令后,可以调用Runtime.getRuntime().exec(command)调用cmd执行脚本,实现更新操作,当然更新之前肯定要关闭对应的服务才能更新,调用cmd的用处在这里就体现出来了,同样大家在更新jar包前可以做点其它的事情,比如远程下载,在线解压等等。
原文链接:https://www.cnblogs.com/longmaodaxia/p/11238884.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:在工作中常用的Linux命令
下一篇:独享还是共享,你选择哪一种锁?
- java方法句柄-----1.方法句柄类型、调用 2020-05-28
- Mockito如何mock一条链式调用 2020-05-17
- git远程仓库,gitblit安装(war包方式) 2020-05-15
- 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调 2020-04-28
- 使用 RestTemplate 进行第三方Rest服务调用 2020-04-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash