最近遇到一个项目需求需要实现远程更新,但是本地项目无法更新自己,这让博主很是头疼,既然自己无法更新自己的话,那就自建新的项目,通过本地项目来调用新项目接口来更新本地项目。

代码如下:

/**
* 重启完成更新
*/
public boolean restart() {
log.info("restart");
String command = "cmd /c start C:\\rct\\winsw\\rct\\update.bat";
//测试
String distName = "dist";
String jarName = "rct-demo-1.0.jar";
String bat;
if (type.equals("dist")) {
log.info("dist");
bat = "@echo off\n" +
"%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
"cd /d \"%~dp0\"\n" +
"net stop \"" + webService + "\"" + "\n" +
"rmdir /S /Q " + targetFile + "\\" + "dist" + "\n" +
"xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" +
"net start \"" + webService + "\"";
} else if (type.equals("jar")) {
log.info("jar");
bat = "@echo off\n" +
"%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
"cd /d \"%~dp0\"\n" +
"net stop \"" + jarService + "\"" + "\n" +
"xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" +
"net start \"" + jarService + "\"";
} else {
log.info("all");
bat = "@echo off\n" +
"%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
"cd /d \"%~dp0\"\n" +
"net stop \"" + jarService + "\"" + "\n" +
"net stop \"" + webService + "\"" + "\n" +
"rmdir /S /Q " + targetFile + "\\" + "dist" + "\n" +
"xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" +
"xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" +
"net start \"" + jarService + "\"" + "\n" +
"net start \"" + webService + "\"";
}
creatBat(bat);
log.info("cmd exec");
try {
if (HttpUtil.isConnect(checkUrl)) {
updated = true;
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
HttpUtil.HttpClientPost(cmdUrl, command);
} else {
errored = true;
return false;
}
} catch (Exception e) {
log.error("http请求异常");
e.printStackTrace();
errored = true;
return false;
}
log.info("cmd success");
return true;
} public void creatBat(String bat) {
FileWriter fw = null;
try {
fw = new FileWriter("C:\\rct\\winsw\\rct\\update.bat");
fw.write(bat);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

远程调用cmd更新本地jar的更多相关文章

  1. git如何强制用远程分支更新本地

    git本地即使有修改如何强制更新: 本地有修改和提交,如何强制用远程的库更新本地.我尝试过用git pull -f,总是提示 You have not concluded your merge. (M ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. 架构师之路-在Dubbo中开发REST风格的远程调用

    架构师之路:从无到有搭建中小型互联网公司后台服务架构与运维架构 http://www.roncoo.com/course/view/ae1dbb70496349d3a8899b6c68f7d10b 概 ...

  4. 【Rest】在Dubbo中开发REST风格的远程调用(RESTful Remoting)

    目录 概述 REST的优点 应用场景 快速入门 标准Java REST API:JAX-RS简介 REST服务提供端详解 HTTP POST/GET的实现 Annotation放在接口类还是实现类 J ...

  5. hession RMI 远程调用

    /** * * @author administror * 在java中,需要去extends 继承java.rmi.Remote 接口,才能称为在于服务器流的远程对象. * 各客服端调用 * */p ...

  6. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

  7. JavaEE(8) - 本地和远程调用的有状态以及无状态Session EJB

    1. 使用NetBeans开发Session Bean #1. 创建项目:File-->New Project-->Java EE-->EJB Module #2. 在项目中创建Se ...

  8. openoffice excel word 转换pdf 支持本地调用和远程调用

    OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...

  9. Spring Batch远程分区的本地Jar包模式

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring相关文章:Springboot-Cloud Spring Batch远程分区对于大量数据的处理非常擅长,它的实现 ...

随机推荐

  1. Spring Boot属性配置&自定义属性配置

    一.修改默认配置 例1.spring boot 开发web应用的时候,默认tomcat的启动端口为8080,如果需要修改默认的端口,则需要在application.properties 添加以下记录: ...

  2. ISO/IEC 9899:2011 条款6.4.4——常量

    6.4.4 常量 语法 1.constant: integer-constant floating-constant enumeration-constant character-constant 约 ...

  3. jsp中cookie的一个报错

    写项目时在一个jsp页面中使用了cookie,用逗号分隔的数据,服务器老报错,搞了一个小时,终于清楚了,jsp的cookie中不能使用逗号. cookie规则:这个规则用于jsp.asp中(下面这两句 ...

  4. .NET C#获取当前网页地址信息

    设当前页完整地址是:http://www.qiandabao.com/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名"www ...

  5. Python3之定制类

    看到类似的__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的 Python中还有许多有特殊用途的函数,可以帮助我们定制类 __str__ 先定义一个S ...

  6. vue+element项目中过滤输入框特殊字符小结

    可以在main.js中写入方法 Vue.prototype.validSe = function (value, number = 255) { value = value.replace(/[`-* ...

  7. 八个免费的Vue图标库

    1. Vue-awesome 也许大家知道 Font-awesome 之类比较流行的图标库,就像各大组件库都有各自版本一样,它也有Vue的版本 Github地址:https://github.com/ ...

  8. Linux安装 PostgreSQL

    1.在线安装 yum install postgresql-server -y 2.初始化数据库 service postgresql initdb 3.设置自动启动 hkconfig postgre ...

  9. java源码 -- AbstractCollection抽象类

    简介  AbstractCollection是一个抽象类,它实现了Collection中除了iterator()和size()之外的所有方法.AbstractCollection的主要作用是方便其他类 ...

  10. Windows下jmap命令报错问题

       最近换了笔记本,新的工作环境下jmap命令居然在报错,而jps.jstat.jinfo.jstack都能正常使用,所以初步排除进程号的问题. Attaching to core 17536 fr ...