zoukankan      html  css  js  c++  java
  • java程序调用CMD命令启动tomcat替换环境变量

    出现问题:

      此时不应有 FilesJavajdk1.8.0_92injava.exe""(本地未出现问题,服务器环境出现)

    出现原因:

      1:环境变量JAVA_HOME配置路径中的空格问题

    2:系统环境变量路径首尾出现双引号  " 为多余

    解决方法:

      1:原路径C:Program FilesJavajdk1.8.0_92,需替换为C:Progra~1Javajdk1.8.0_92 ;

      2:将相关环境变量路径的首尾双引号 “  去掉 ;

    如:

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    import java.util.concurrent.Future;

     

    public static Map<String, String> execute(String directory,String[] cmd){

    Map<String, String> result = new HashMap<>();

    Process p = null;

    try {

    ProcessBuilder builder =  new ProcessBuilder(cmd);

    File file = new File(directory) ;

    builder.directory(file);

    Map<String, String> env = builder.environment();

    env.put("CATALINA_HOME", file.getParent());

    env.put("CATALINA_BASE", file.getParent());

    logger.info("=: -----------------------");

    for(String str : env.keySet()){

    if(env.get(str) != null){

      env.put(str, env.get(str).replaceAll("Program Files", "PROGRA~1"));

    }

    logger.info(str+"=: "+env.get(str));

    }

    logger.info("=: -----------------------");

    String javaHome = System.getenv("JAVA_HOME");

    if(StringUtils.isNotEmpty(javaHome)) {

    javaHome = javaHome.replace("%20", " ").replaceAll("Program Files", "PROGRA~1");

    }

    env.put("JAVA_HOME", javaHome);

    //环境可能是Path 或  PATH

    String _Path = env.get("Path");

    if(StringUtils.isNotEmpty(_Path)){

    env.put("Path", _Path.replaceAll(""", ""));

    }

    String _PATH = env.get("PATH");

    if(StringUtils.isNotEmpty(_PATH)){

    env.put("PATH", _PATH.replaceAll(""", ""));

    }

    String _EXECJAVA = env.get("_EXECJAVA");

    if(StringUtils.isNotEmpty(_EXECJAVA)){

    env.put("_EXECJAVA", _EXECJAVA.replaceAll(""", ""));

    }

    String _RUNJAVA = env.get("_RUNJAVA");

    if(StringUtils.isNotEmpty(_RUNJAVA)){

    env.put("_RUNJAVA", _RUNJAVA.replaceAll(""", ""));

    }

    String _RUNJDB = env.get("_RUNJDB");

    if(StringUtils.isNotEmpty(_RUNJDB)){

      env.put("_RUNJDB", _RUNJDB.replaceAll(""", ""));

    }

    for(String str : env.keySet()){

      logger.info(str+"=: "+env.get(str));

    }

    logger.info("正在执行命令...." + builder.directory());

    p = builder.start();

    logger.info("正在执行命令....");

    InputStream errorStream = p.getErrorStream();

    ExecutorService exec = Executors.newCachedThreadPool();

    Future<String> errorSubmit = exec.submit(new WorkCallable(p, errorStream,"ERROR"));

    InputStream correctStream = p.getInputStream();

    Future<String> correctSubmit = exec.submit(new WorkCallable(p, correctStream,"STDOUT"));

    logger.info("正在执行命令2....");

    String errorMsg = errorSubmit.get();

    String successMsg = correctSubmit.get();

    logger.info(errorMsg);

    logger.info(successMsg);

    if(StringUtils.isEmpty(errorMsg)) {

    result.put("status", "success");

    result.put("msg", successMsg);

    } else {

    result.put("status", "error");

    result.put("msg", errorMsg);

    }

    p.waitFor();

    exec.shutdown();

    } catch (Exception e) {

    result.put("status", "error");

    result.put("msg", e.getMessage());

    logger.error("执行命令异常,请检查参数",e.getMessage());

    }

    return result;

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    O(1)时间求出栈内元素最小值
    静态查找>顺序、折半、分块查找
    字符串的最大重复数
    数据结构>栈
    排序>归并排序
    动态查找>二叉查找树(Binary Search Tree)
    数据结构>图的存储结构
    数据结构>图的连通性和最小生成树
    图片的轮廓
    数据结构>队列
  • 原文地址:https://www.cnblogs.com/liujf-a-mad-man/p/10785449.html
Copyright © 2011-2022 走看看