-
SpringBoot实现调用自定义的应用程序((最新推荐)
这篇文章主要介绍了SpringBoot实现调用自定义的应用程序的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
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应用程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支
原文链接:https://blog.csdn.net/song1998s/article/details/139825640
最新更新
pythonv如何解析mdf或mf4文件之asammdf用法
SpringBoot实现调用自定义的应用程序((最新
详解如何使用XML配置来定义和管理Spring
SpringBoot中使用MQTT实现消息的订阅和发布
在Spring中实现异步处理的步骤和代码演示
gRPC在Java中的实现与应用详解
redis中存储list<map>,list<entity>的处理
SpringBoot+Vue中的Token续签机制
Mybatis-Plus根据自定义注解实现自动加解密
详解SpringBoot同时可以处理多少请求
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比