Java自动重启jar包
时间:2022-07-22
本文章向大家介绍Java自动重启jar包,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现思路:获取某目录下的所有jar包,根据最新的修改时间来启动该jar包(当然你也可以写死路径,就连获取也不用了),运用多线程 执行cmd命令同时关闭原程序
优点:可以部署到生产环境中,适用于一切框架,支持通过Http请求来实现重启/升级jar包
缺点:似乎无法在ide工具中测试。
声明:只在Windows环境下测试过,理论上Linux只需小改即可。
核心其实就两步多线程。
package com.example.plane.handler;
import cn.hutool.core.io.FileUtil;
import lombok.AllArgsConstructor;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
/**
* @author 乐心湖
* @date 2020/7/22 13:37
**/
public class Restart {
public static void restartMain() {
File[] files = FileUtil.ls(System.getProperty("user.dir"));
HashMap<Long, String> fileMap = new HashMap<>();
for (File file : files) {
if (file.getName().endsWith(".jar")) {
fileMap.put(file.lastModified(), file.getName());
}
}
Set<Long> longs = fileMap.keySet();
Long max = Collections.max(longs);
System.out.println(fileMap.get(max));
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "java", "-jar", fileMap.get(max));
new start(pb).start();
new exit().start();
}
}
@AllArgsConstructor
class start extends Thread {
ProcessBuilder pb;
@Override
public void run() {
try {
pb.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class exit extends Thread {
@Override
public void run() {
System.exit(0);
}
}
- 联发科将推出两款芯片,拥有AI和人脸识别技术,能和高通叫板吗?
- 谷歌AI黑科技曝光:合成语音与真人声音难以区分
- 小程序是什么?有什么用?
- Aibee融资1.65亿元 曾16.8万元秒下aibee.cn
- 小程序审核攻略
- js checkbox.checked=true在document.body.appendChild(checkbox)前与后赋值
- 吹得飞起的人工智能,2017都摔过哪些跟头?
- 排序还可以这样做
- 韩政府公布虚拟货币投机行为打击对策
- SqlServer2005数据库文件损坏的拯救过程
- 2017年,人类在自己设计的所有游戏中都败给了AI,无一幸免
- 测试组,请用VSS命令行获取最新版本
- 想起温习一下JS中的this apply call arguments
- 学习利用JSON 摆脱表单与业务对象双向转换的繁琐工作
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Elastic Stack 实现日志的自动采集、搜索和分析
- 致开发人员:沉迷面向对象编程不可自拔?函数式编程了解一下
- MySQL空间函数实现位置打卡
- 单细胞交响乐8-marker基因检测
- 用TensorFlow.js在浏览器中进行实时语义分割 | MixLab算法系列
- python实现高性能mock服务
- 数据可视、语义分割、T_Youtube、智能调酒 | Mixlab人工智能合集
- Appium自动化测试框架探索与实践
- 交叉验证和超参数调整:如何优化你的机器学习模型
- 编写Docker Compose时要注意的五大常见错误
- 详解DBSCAN聚类
- 机器学习入门:偏差和方差
- Python中得可视化:使用Seaborn绘制常用图表
- 聊聊RespServer
- Spring 源码第 8 篇,各种属性的解析