SpringBoot实现调用自定义的应用程序((最新推荐)

 更新时间:2024年06月21日 15:18:04   作者:宋宋大王  
这篇文章主要介绍了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应用程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java日志正确使用姿势

    详解Java日志正确使用姿势

    这篇文章主要介绍了Java日志正确使用姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java实现的properties文件动态修改并自动保存工具类

    Java实现的properties文件动态修改并自动保存工具类

    这篇文章主要介绍了Java实现的properties文件动态修改并自动保存工具类,可实现针对properties配置文件的相关修改与保存功能,需要的朋友可以参考下
    2017-11-11
  • 实例分析java中重载与重写的区别

    实例分析java中重载与重写的区别

    这篇文章主要介绍了实例分析java中重载与重写的区别,需要的朋友可以参考下
    2014-07-07
  • 关于Java Interface接口的简单练习题

    关于Java Interface接口的简单练习题

    这篇文章主要给大家分享的是关于Java Interface接口的简单练习题,难度不算大,但是要有一个清晰的逻辑建立接口和链接Java类。下面来看看文章的详细介绍吧,需要的朋友可以参考一下
    2021-11-11
  • IO密集型任务设置线程池线程数实现方式

    IO密集型任务设置线程池线程数实现方式

    这篇文章主要介绍了IO密集型任务设置线程池线程数实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java调用groovy实现原理代码实例

    Java调用groovy实现原理代码实例

    这篇文章主要介绍了Java调用groovy实现原理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java实现PDF导出功能的示例代码

    Java实现PDF导出功能的示例代码

    这篇文章主要为大家详细介绍了Java实现PDF导出功能的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • @RefreshScope(nacos配置热更新方式)

    @RefreshScope(nacos配置热更新方式)

    文章主要介绍了Spring和Nacos对`@RefreshScope`注解的处理方式,Spring在每次调用被`@RefreshScope`注解的bean的属性时,会先从本地缓存获取,如果缓存不存在则重新创建并获取最新环境配置
    2024-12-12
  • 使用spring boot 整合kafka,延迟启动消费者

    使用spring boot 整合kafka,延迟启动消费者

    这篇文章主要介绍了使用spring boot 整合kafka,延迟启动消费者的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • JAVA控制流程break continue的示例代码

    JAVA控制流程break continue的示例代码

    JAVA流程控制中有相关代码可以终止整个流程的进程,他们就是(break和continue),本文通过实例代码介绍下JAVA控制流程break continue的相关知识,感兴趣的朋友一起看看吧
    2022-03-03

最新评论