【Java】多次启动相同jar程序

本文介绍了如何在测试环境中模拟集群部署,通过单台机器运行多个相同jar程序。内容包括通过URLClassLoader加载、java -jar命令、复制jar文件以及Linux Shell脚本等四种方式启动jar程序,并详细阐述了每种方式的原理和操作步骤,同时针对启动过程中可能出现的问题如端口冲突等提出了解决方案。
摘要由CSDN通过智能技术生成

背景

现在很多软件都支持集群部署,但是测试环境通常资源有限,所以一般通过单台机器模拟集群部署(使用不同端口,运行相同jar包),本文的目的就是通过多种方式实现此需求。

两个程序

1、jar程序

① springboot程序

② 只包含一个main方法,用于启动程序,输出进程ID

③ 路径:C:/demo.jar(windows) /demo.jar(Linux)

2、启动程序

① 包含main方法的程序

多种方式

1、通过URLClassLoader加载jar程序(windows平台)

2、通过java -jar命令启动jar程序(windows平台)

3、通过复制原始jar文件,启动不同的jar程序(windows平台)

4、通过Linux Shell脚本启动(Linux平台)

方式一

1、通过URLClassLoader加载jar程序(windows平台)

① 说明

1) 启动程序多次加载jar程序

2) jar程序和启动程序使用相同进程,非独立进程,无实际意义,仅介绍

② 启动jar程序:运行启动程序main方法

③ 终止jar程序:停止启动程序(因为共用同一个进程,终止主程序,jar程序会同时终止)

2、代码

① jar程序

@SpringBootApplication

public class DemoStarter {
   

    public static void main(String[] args) {
   

        // 获取进程Id

        String name = ManagementFactory.getRuntimeMXBean().getName();

        String processId = name.split("@")[0];

        System.out.println(processId);

        SpringApplication.run(DemoStarter.class, args);
    }
}

② 启动程序

import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Starter1 {
   

    public static void main(String[] args) throws Exception {
   

        start("7001");
        start("7002");
        start("7003");
    }
    
    private static void start(String port) throws Exception {
   

        String path = "file:" + "C:/demo.jar";

        URLClassLoader classLoader = new URLClassLoader(new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值