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);
}
}
- SpringMVC 文件下载时 浏览器不能正确显示另存的文件名
- 手把手教你用python抢火车票
- SpringMVC 实现多文件上传的两种方式及其效率比较
- Spring 之加载配置属性文件和注解属性绑定
- SpringMVC 提交表单400 Bad Request
- 如何在三年内快速成长为一名技术专家
- 【微信开发】getAccessToken 和 getJsapi_ticket缓存支持
- 微信JS-SDK 注入权限验证配置
- Maven 项目下slf4j 包冲突问题
- 谷歌教你学 AI-第三讲简单易懂的估算器
- 黑产是如何强刷用户银行卡8.1万元的?
- Spring 必知概念(二)
- 利用iText 组件导出PDF
- 利用POI组件导出Excel的简单示例
- 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 文档注释
- 操作系统基础 - 文件系统
- Linux升级OpenSSH修复高危漏洞
- Pytest之收集用例及命令行参数
- CVE-2020-14645:Weblogic远程代码执行复现
- 从0到1开发测试平台(七)后端服务添加swagger第三方类库
- leetcode - 分割数组的最大值
- leetcode - 除数博弈
- leetcode - 最小路径和
- Javascript中的数据类型
- JAVA 应用日志最佳实践
- 用pageadmin cms系统进行网站制作的经验总结
- 14个Linux系统安全小妙招,总有一招用的上
- CVE-2020-14645:Weblogic远程代码执行复现
- Centos7 安装Mysql-寻找共性-万变不离其宗
- MySQL 入门、安装和客户端管理工具