jar包版本冲突,并且要保留两个版本都能使用

问题:在做项目时,遇到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资源,

   解决这个问题只能控制并发量

 

posted @ 2015-08-18 12:29  这些年  阅读(7405)  评论(0编辑  收藏  举报