前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java自动重启jar包

Java自动重启jar包

作者头像
乐心湖
发布2020-07-31 15:09:39
2.5K0
发布2020-07-31 15:09:39
举报
文章被收录于专栏:MyTechnology

实现思路:获取某目录下的所有jar包,根据最新的修改时间来启动该jar包(当然你也可以写死路径,就连获取也不用了),运用多线程 执行cmd命令同时关闭原程序

优点:可以部署到生产环境中,适用于一切框架,支持通过Http请求来实现重启/升级jar包

缺点:似乎无法在ide工具中测试。

声明:只在Windows环境下测试过,理论上Linux只需小改即可。

核心其实就两步多线程。

代码语言:javascript
复制
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);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档