实现思路:获取某目录下的所有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);
    }
}

Last modification:August 17, 2020
如果觉得我的文章对你有用,请随意赞赏