SpringBoot实现调用自定义的应用程序((最新推荐),
分享于 点击 43437 次 点评:280
SpringBoot实现调用自定义的应用程序((最新推荐),
目录
- 1.应用程序设置全局可执行
- 2.在代码中配置调用程序的指令,并在Service中引入
- 3.编写命令执行方法
- 4.如命令执行时间过长,可先返回命令调用情况,后续进行任务的更新操作
1.应用程序设置全局可执行
添加安装路径到全局变量中,并执行source指令使其生效
export PATH=$PATH:/the/path/to/software
source /etc/profile
2.在代码中配置调用程序的指令,并在Service中引入
coverage: command: coverage
@Value("${coverage.command}") private String coverageCommand;
3.编写命令执行方法
/* *调用命令并将执行日志写入文件中 */ public void exeCmd(String commandStr, String logFile) { BufferedReader br = null; String line = null; StringBuilder stringBuild = new StringBuilder(); try { Process p = Runtime.getRuntime().exec(commandStr); br = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((line = br.readLine()) != null) { stringBuild.append(line + "\n"); log.info(line); try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new String(logFile.getBytes("utf-8"))), "utf-8")) { out.append(stringBuild); } } } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } } /* *调用命令并返回全部命令执行日志 */ public String getVariable(String command) throws IOException { BufferedReader br = null; String line = null; List<String> strings = new ArrayList<>(); StringBuilder stringBuild = new StringBuilder(); try { Process p = Runtime.getRuntime().exec(command); br = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((line = br.readLine()) != null) { stringBuild.append(line + "\n"); strings.add(line); } } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } return strings.toString(); }
4.如命令执行时间过长,可先返回命令调用情况,后续进行任务的更新操作
ExecutorService executorService = Executors.newFixedThreadPool(2); CompletableFuture<Integer> future = CompletableFuture.supplyAsync(new Supplier<Integer>() { @Override public Integer get() { log.info("开始执行算法-------"); exeCmd(commendStr, outLog()); log.info("算法执行结束"); File txtFile = new File(outLog); //根据实际加工逻辑进行更新或其他操作 if (txtFile.exists()) { task.setSuccessTime(new Date()); task.setTaskStatus("SUCCESS"); } else { task.setErrorTime(new Date()); task.setTaskStatus("ERROR"); } taskMapper.updateTaskInfo(task); return 3; } }, executorService); future.thenAccept(e -> System.out.println(e));
到此这篇关于SpringBoot实现调用自定义的应用程序的文章就介绍到这了,更多相关SpringBoot应用程序内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!
您可能感兴趣的文章:- SpringBoot应用程序启动监听功能的常见方法
- SpringBoot应用程序转换成WAR文件详解
- SpringBoot 应用程序测试实现方案
- SpringBoot快速构建应用程序方法介绍
用户点评