问题:在做项目时,遇到jar版本冲突的问题,并且老代码依赖不能用新jar包代替,要保证功能不变须要保证两个jar都能使用
思路:使用runtime 的exec 方式另启线程运行,然后返回结果
解决:
1):创建可运行的jar包,并创建入口main方法,方法实现新功能的调用与结果或异常的返回
public static void main(String[] args) { try { //接收参数 String privateKeyPath = args [0]; /* 业务逻辑 */ System.out.println("ok" ); System.out.println(业务逻辑有返回结果,如果有 ); } catch (Exception e ) { System.out.println("error" ); System.out.println(e); }
2):在项目新创建调用方法,本例使用windows 环境
Runtime r = Runtime.getRuntime(); try{ //new String[]{"/bin/sh","-c","ln -s exe1 exe2"}) linux下的命令 Process proc = r .exec(new String[]{"cmd" ,"/c" ,"java -jar citicbankclient.jar gbz"}); BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream(), "gbk" )); String line = null ; while ((line = reader.readLine()) != null){ //接收system.out输出 System. out.println(line); } int exitVal = proc.waitFor(); //调用是否成功 System. out.println(exitVal == 0 ? "ok" : "error" ); } catch(Exception e ){ e.printStackTrace(); }
注意:这种方式是把新功能另启jvm来完成jar包隔离的,在高并发情况下会启动多个jvm,如果jvm不能很快的执行完,会消耗大量内存及cpu资源,
解决这个问题只能控制并发量
时间: 2024-10-10 04:19:59