jar包版本衝突,而且要保留兩個版本都能使用

問題:在作項目時,遇到jar版本衝突的問題,而且老代碼依賴不能用新jar包代替,要保證功能不變需要保證兩個jar都能使用java

思路:使用runtime 的exec 方式另啓線程運行,而後返回結果linux

解決:windows

  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 環境jvm

                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資源,高併發

   解決這個問題只能控制併發量spa

相關文章
相關標籤/搜索